结构数据的C内存分配顺序

时间:2018-07-12 03:53:52

标签: c malloc

我正在阅读别人编写的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的大小是多少?

难道不应该为每个组件分配内存吗?

2 个答案:

答案 0 :(得分:1)

在实际拥有lda_suffstats之前,您可以知道lda_suffstats的大小,就像您知道要容纳两箱牛奶和一打鸡蛋需要携带多少袋子一样。 double**的大小等于double*doubleintlda_suffstats的大小之和。它们不是独立的组件,它们都将使用malloc的内存。现在,前两个是指针,这意味着关联的值不在那里,而仅指向该指针,并且分配指针的目标就是另外两行{{1}}所要涉及的内容。

答案 1 :(得分:1)

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