【发布时间】:2020-11-02 14:38:45
【问题描述】:
我没有在文档中找到明确的声明,但我发现在我的实验中确实如此,
bits_of(A) % alignment(A) == 0
事实上,如果不是真的,那么该类型数组中的元素之间需要一些填充,所以我相信它一定是真的,但我只是想在这里确定一下。
我在想另一个问题,类型的大小是多少?
实际上,LLVM IR 不提供任何标准指令来获取类型的大小,而只是通过 (int)(((T*) NULL) + 1) 之类的技巧,如 here 和 there 所述。
但是,它只是对齐的相邻指针的差异,它始终是其对齐的倍数。
它可能不是实际占用的大小。
例如结构体{i8, i32, i8},在相邻对齐的指针中有12个字节,但考虑到字段对齐只占用9个字节(9个字节足够内存分配)
i8 | 3bytes padding | i32 | i8
那么尺寸是多少呢? 大小在不同的情况和语言中是一个有争议的概念吗?
【问题讨论】:
-
我也对 LLVM 之外的其他情况感兴趣。
标签: alignment size llvm sizeof memory-alignment