c++ - 在c语言中查找结构的大小
问题描述
在节点结构中,数据大小为 4 字节,节点* 大小为 8 字节,而节点大小为 16 字节。在 4+8=12 之后,节点的 4 个额外字节在哪里?
我对此一无所知。
struct node
{
int data;
struct node* next;
}s;
int main()
{
printf("node => %d \n",sizeof(s));
printf("node.data => %d \n",sizeof(s.data));
printf("node* => %d ",sizeof(s.next));
return 0;
}
/*OUTPUT-
node => 16
node.data => 4
node* => 8 */
解决方案
从本文档(https://en.cppreference.com/w/c/language/struct) 中,结构的任何两个成员之间或最后一个成员之后可能存在未命名的填充,但不是在第一个成员之前。结构的大小至少与其成员大小的总和一样大。
这是由于对齐要求。
|--|--|--|--|??|??|??|??|--|--|--|--|--|--|--|--|
int padding pointer
指针在您的平台上以 8 的倍数对齐。
(https://en.wikipedia.org/wiki/Data_structure_alignment)
推荐阅读
- javascript - 如何修复 jQuery 中的 ReferenceError
- macos - .zshrc 上的 PS1 输出字符串而不是所需的输出
- javascript - 如何让我的机器人可以容纳 2 个参数命令 DiscordJS
- r - 通过括号 [] 将字符串应用到子集
- javascript - 如何在 Visual Studio Code 上的 Vue 文件中启用 JavaScript 类型检查?
- javascript - 如何将自定义道具传递给反应登录按钮
- python - 将索引和值作为字典返回
- r - 有没有办法将 chemarr 的乳胶表达式用于 bookdown 包的 `gitbook` 格式?
- python - 方法内的递归
- python - 如何仅计算连续天数的百分比变化?