【发布时间】:2015-05-19 15:47:08
【问题描述】:
我有以下结构:
#define M 3
#pragma pack(push)
#pragma pack(1)
struct my_btree_node {
struct my_btree_node *pointers[M];
unsigned char *keys[M - 1];
int data[M - 1];
unsigned char number_of_keys;
};
#pragma pack(pop)
sizeof(struct my_btree_node) 函数为此结构返回一个 49 字节的值。使用malloc 为该结构分配内存是否会返回一个 64 字节块,因为在 64 位系统上,指针是 16 字节对齐的,还是确实是 49 字节?
有没有办法将内存与小于 16 的 2 的幂对齐,是否可以获得应用程序内部分配内存的真实大小?
我想减少填充字节数以节省内存。我的应用程序分配了数百万个这样的结构,我不想浪费内存。
【问题讨论】:
-
您为什么架构 (IA) 编译?
-
有什么用?对齐很好。
-
@CodeClown x86_64 架构
-
@user4419802 不使用填充字节以节省内存
-
15 个字节并不是什么大收获。但是如果你有太多的结构体,也就是一个结构体数组,你可能只是将数据拆分为几个数组,因为数组永远不会被填充。
标签: c gcc malloc memory-alignment