我受的size_t
一些行为,我注意到困惑大得多:为size_t为0x1 << 31比为size_t为0x1 << 30
size_t zero = 0x1 << 32;
size_t big = 0x1 << 31;
size_t not_as_big = 0x1 << 30;
printf("0x1<<32: %zx\n0x1<<31: %zx\n0x1<<30: %zx\n", zero, big, not_as_big);
结果:
0x1<<32: 0
0x1<<31: ffffffff80000000
0x1<<30: 40000000
现在,我明白了size_t
只保证至少是一个16位无符号整数,但我不明白为什么0x1<<31
结束了它所做的值 - 试图分配18艾字节在我的程序上做了一个数字。
我在x86_64上使用LLVM。
符号扩展... – Mysticial