结构数据的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的大小是多少?难道不应该先为每个组件分配内存吗?

在你真正拥有lda_suffstats之前,你就可以知道它有多大,就像你知道你需要带多大的袋子才能装下两箱牛奶和十几个鸡蛋一样。lda_suffstats的大小是double**double*doubleint的大小之和,不多也不少。它们不是独立的组件,它们都将使用lda_suffstats的内存。现在,前两行是指针,这意味着相关联的值不在那里,而是仅指向,而分配指针的目标就是其他两行malloc的内容。

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

相关内容

  • 没有找到相关文章