首页 > 解决方案 > 结构数据的 C 内存分配顺序

问题描述

我正在阅读其他人编写的 C 脚本。我不明白这个内存分配部分。

lda_suffstats* ss = malloc(sizeof(lda_suffstats));
ss->class_total = malloc(sizeof(double)*num_topics);
ss->class_word = malloc(sizeof(double*)*num_topics);

其中 lda_suffstats 是一个自定义结构,

typedef struct
{
double** class_word;
double* class_total;
double alpha_suffstats;
int num_docs;
} lda_suffstats;

我的问题是关于内存分配的第一行。lda_suffstats 的大小是多少?不应该先分配每个组件的内存吗?

标签: cmalloc

解决方案


lda_suffstats有四个字段,类型分别为double**double*doubleint。每一个的大小在编译时都是已知的。它们大小的总和给出 的大小lda_suffstats。分配给指针的内存量不会改变这一点,因为该内存是在struct.


推荐阅读