c - 结构数据的 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
有四个字段,类型分别为double**
、double*
、double
和int
。每一个的大小在编译时都是已知的。它们大小的总和给出 的大小lda_suffstats
。分配给指针的内存量不会改变这一点,因为该内存是在struct
.
推荐阅读
- apache - 如何使用 certbot 为没有域名的网站创建 SSL?
- javascript - 超过最大调用堆栈大小 React Tree View Component Material-UI
- javascript - 检查数组中是否存在字符串
- react-native - 屏幕之间的 React Native Navigation 蓝图
- embedded-linux - 如何让系统在没有X11的情况下自动启动进入QT app
- google-sheets - 如何排除谷歌表格列中的重复值?
- javascript - 如何从后端访问响应状态码到前端
- serenity-bdd - Selenium/Serenity Bdd - 当页面太长(包含 25 个项目的列表,我遇到 RenderedPageObjectView 错误
- tensorflow - 镶木地板中的 tensorflow_io 数组元素失败
- javascript - Vue.js 硬刷新后从输入中重置状态值。如何解决?