c - C中结构的大小
问题描述
看看下面的代码:
#include<stdio.h>
struct Node
{
int data;
struct Node* nxt;
};
int main()
{
int a = sizeof(struct Node);
int b = sizeof(int);
int c = sizeof(int*);
printf("size of Node: %d\nsize of int: %d\nsize of int*: %d",a,b,c);
return 0;
}
以下是上述代码的输出:
size of Node: 16
size of int: 4
size of int*: 8
我的问题是整数的大小是 4 字节,整数指针的大小是 8 字节。所以这两个的总和应该是结构的大小。但是为什么编译器(GCC)说它占用 16 个字节呢?
解决方案
[...] 关于结构填充。C 编译器知道在 RAM 中存储未对齐的数据可能会很昂贵,因此它会为您填充数据。如果一个结构中有 5 个字节的数据,它可能会变成 8. 或 16. 或 6. 或任何它想要的。有一些扩展,如对齐和打包的 GCC 属性,可以让您对该过程进行一些控制,但它们是非标准的。C 本身并没有定义填充属性,所以正确答案是:“我不知道”</p>
推荐阅读
- c# - 如何访问 Firebase 安全规则中的自定义元数据进行存储
- r - 从R中的一系列数字中创建一个逗号分隔的字符串
- linux - Vim 加载所有包含字符串的文件
- flutter - 如何在 if else 中显示两个 SizedBox()?
- java - 如何通过Java在服务器端获取自定义HTTP请求头
- c++ - gtkmm 4: 使小部件垂直填充 Gtk::HeaderBar
- linux - 在 Windows 上使用 ubuntu 终端在 ssh 上拒绝权限
- python - 为什么 set_xticklabels 只能在使用 set_xticks 后按预期工作?
- python - 按下 KivyMD 快速拨号按钮时如何触发功能?
- android - Intent.ACTION_SEND 找不到 Whatsapp