1

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

更新:感谢所有回复。我希望在某处拥有更多类似于静态表的内容,而不是我必须在每台机器上编写和运行的一段代码。

4

6 回答 6

9

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

#include <iostream>
#include <typeinfo>

template <typename T>
void print_sizeof(void)
{
    std::cout << "sizeof(" <<
        typeid(T).name() << ") == " <<
        sizeof(T) << std::endl;
}

int main(void)
{
    print_sizeof<short>();
    print_sizeof<unsigned int>();
    print_sizeof<long>();
    print_sizeof<long long>();
    print_sizeof<uint64_t>();
}

请注意,编译器不需要为您提供名称的实际字符串,但大多数都会这样做。

于 2009-09-22T00:06:09.897 回答
7

一般来说,如果包含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
于 2009-09-22T01:09:22.170 回答
6

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

#include <stdio.h> 
#include <inttypes.h> 

#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     );
}

编辑: %i 更改为 %zi

于 2009-09-21T23:48:01.420 回答
3

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

于 2009-09-22T00:18:26.070 回答
2

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

于 2009-09-21T23:47:00.313 回答
0

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

于 2009-09-22T00:04:19.290 回答