long int (据我所知,它是long的同义词)总是4字节吗?
我能依赖这个吗?如果不是,基于POSIX的操作系统会是真的吗?
发布于 2016-03-07 13:18:45
正如@delnan所指出的那样,POSIX实现将long和int的大小保持为未指定的大小,并且在32位和64位系统之间常常存在差异。
long的长度主要与硬件相关(通常与CPU上的数据寄存器大小相匹配,有时与其他软件相关的问题,如OS设计和ABI接口)。
为了让您放心,sizeof不是一个函数,而是一个编译器指令*,所以您的代码在使用sizeof时不使用操作--这与编写数字一样,只是它是可移植的。
用途:
sizeof(long int)*正如Dave在注释中指出的那样,在编译期间(例如使用可变长度数组)无法计算值时,将在运行时计算sizeof。
另外,正如在另一个注释中指出的,sizeof考虑了实现所使用的填充和对齐,这意味着实际使用的字节可能与内存中的大小不同(这在位移位时可能很重要)。
如果要查找特定字节大小的变量,请考虑使用字节数组,或者(我假设支持) C99在stdint.h中定义的类型--正如@dbush所建议的那样。
https://stackoverflow.com/questions/35844586
复制相似问题