我正在阅读别人编写的C脚本。我不了解此内存分配部分。
/etc
其中lda_suffstats是一个自定义结构,
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的大小是多少?
难道不应该为每个组件分配内存吗?答案 0 :(得分:1)
在实际拥有lda_suffstats
之前,您可以知道lda_suffstats
的大小,就像您知道要容纳两箱牛奶和一打鸡蛋需要携带多少袋子一样。 double**
的大小等于double*
,double
,int
和lda_suffstats
的大小之和。它们不是独立的组件,它们都将使用malloc
的内存。现在,前两个是指针,这意味着关联的值不在那里,而仅指向该指针,并且分配指针的目标就是另外两行{{1}}所要涉及的内容。
答案 1 :(得分:1)
lda_suffstats
具有四个字段,类型分别为double**
,double*
,double
和int
。它们的大小在编译时是已知的。它们大小的总和为lda_suffstats
。分配给指针的内存量不会改变这一点,因为该内存分配在struct
之外。