我正在为运行在Intel x86和x64架构上的Linux编写代码(至少!),使用gcc转储和从内存到磁盘读取数据结构作为实现序列化的廉价方式。每个字段都应该没有填充。
为此,我仔细地组织了这些结构,以便每个字段都具有存储信息所需的位数,并将它们手动对齐到4个字节的边界(应该是8个?)。
我开始考虑过多的整数修改(int
,long int
,long long int
,unsigned long long int
等等),但没有找到关于此事的明确来源(和通过虚拟程序获取有关结构的信息是枯燥乏味的,并且特定于我的硬件。)
这就是说,我需要一些字段为16位,一些字段为32位,一些字段为64位。有没有办法实现这个目标?
答案 0 :(得分:4)
您可以使用C99标题<stdint.h>
,它定义了int16_t
和uint32_t
等固定宽度类型。
显然,您仍然需要小心填充和对齐,但如果您确切知道每个数据成员的大小,那么它应该不会太困难。利用GCC's packed
and aligned
attributes来确保正确对齐仍然是有益的。