繁体   English   中英

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

[英]C memory allocation sequence for struct data

我正在阅读别人编写的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 它们的大小在编译时是已知的。 它们大小的总和给出了lda_suffstats的大小。 分配给指针的内存量不会改变,因为该内存分配在struct之外。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM