C / C ++:各种编译器/平台的内置类型的大小

我在哪里可以获得有关Mac OS X(32位和64位) gcc下的unsigned int编译大小的信息? 一般来说,我喜欢拥有一个可以使用编译器/设置/平台/类型的资源,并且能够查找该类型的大小。 有谁知道这样的事情?

更新:感谢所有回复。 我希望在某个地方有更多的东西,而不是我必须在每台机器上编写和运行的代码。

如果您无法编写程序来查找,则应参考编译器/平台的ABI(应用程序二进制接口)规范。 它应该记录所支持的基本基元类型的大小,对齐,字节序等。

sambowry方法的通用方法(C ++):

 #include  #include  template  void print_sizeof(void) { std::cout << "sizeof(" << typeid(T).name() << ") == " << sizeof(T) << std::endl; } int main(void) { print_sizeof(); print_sizeof(); print_sizeof(); print_sizeof(); print_sizeof(); } 

请注意,编译器不需要为name提供实际的字符串,但大多数都是。

通常,如果包含stdint.h ,则无需知道确切的大小。 定义了几种非常有用的类型。

如果您想要精确尺寸,请使用以下选项:

 int8_t uint8_t int16_t uint16_t int32_t uint32_t int64_t uint64_t 

如果您想要至少指定的大小,请使用以下:

 int_least8_t uint_least8_t int_least16_t uint_least16_t int_least32_t uint_least32_t int_least64_t uint_least64_t 

如果您希望至少为速度优化指定的大小,请使用以下命令:

 int_fast8_t uint_fast8_t int_fast16_t uint_fast16_t int_fast32_t uint_fast32_t int_fast64_t uint_fast64_t 

您可以使用sizeof运算符查询数据类型的长度。 例如:

 #include  #include  #define PRINT_SIZEOF(type) printf("sizeof( " #type " ) == %zi\n", sizeof(type) ) int main(void){ PRINT_SIZEOF( short ); PRINT_SIZEOF( unsigned int ); PRINT_SIZEOF( long ); PRINT_SIZEOF( long long ); PRINT_SIZEOF( uint64_t ); } 

编辑:%我改为%zi

您可以编写一个测试程序,对您感兴趣的所有类型使用sizeof调用。也可以检查limits.h。

你可能会写一些提示输入类型的简单shell脚本,当你输入它时,它会编译类似sambowry发布的内容并执行它来告诉你它的大小是多少。