我知道U字面意思是c,该值是无符号整数。无符号intagers大小为4个字节。
但是2U或1024U有多大?这仅仅意味着2 * 4字节= 8字节,或者这种表示法是否意味着2(或1024)是无符号整数?
我的目标是弄清楚如果我像这样调用malloc将分配多少内存
int *allocated_mem = malloc(2U * 1024U);
并在一个简短的程序中证明我的回答是我尝试过的
printf("Size of 2U: %ld\n", sizeof(2U));
printf("Size of 1024U: %ld\n", sizeof(1024U));
我希望第一行的大小为2 * 4 Bytes = 8,而第二行的大小为1024 * 4 Bytes = 4096,但输出始终为“4”。
真的很感激2U和1024U的确切含义,我如何在C中查看它们的大小?
我的目标是弄清楚如果我像这个
int *allocated_mem = malloc(2U * 1024U);
一样调用malloc将分配多少内存
2 * 1024 == 2048有什么困难?它们是无符号文字的事实并没有改变它们的价值。
无符号整数大小为4个字节。 (原文如此)
你是对的。所以2U
占用4个字节,而1024U
占用4个字节,因为它们都是无符号整数。
我希望第一行的大小为2 * 4 Bytes = 8,而第二行的大小为1024 * 4 Bytes = 4096,但输出始终为“4”。
为什么价值会改变大小?大小仅取决于类型。 2U
的类型为unsigned int
,因此占用4个字节;与50U
相同,与1024U
相同。它们都占用4个字节。
您试图将值(2)乘以类型的大小。这是没有意义的。
多大?
2U
和1024U
的大小相同,大小与unsigned
相同,通常为32位或4“字节”。在给定平台中,类型的大小是相同的 - 它不会因为价值而改变。
“我知道U字面意思是c,该值是无符号整数。” - >好的,到目前为止足够近。
“无符号整数大小为4个字节。”合理猜测C还要求unsigned
至少为16位。此外,U
使常数无符号,但可能是unsigned
,unsigned long
,unsigned long long
,取决于价值和平台。
细节:在C中,2U
不是文字,而是常数。 C有字符串文字和复合文字。文字可以有他们的地址,但&2U
无效C.其他语言称2U
为文字,并对如何使用它们有规则。
我的目标是弄清楚如果我像这个
int *allocated_mem = malloc(2U * 1024U);
一样调用malloc将分配多少内存
相反,更好地使用size_t
进行大小调整而不是unsigned
并检查分配。
size_t sz = 2U * 1024U;
int *allocated_mem = malloc(sz);
if (allocated_mem == NULL) allocated_mem = 0;
printf("Allocation size %zu\n", allocated_mem);
(旁白)小心计算尺寸。使用size_t
类型做你的大小数学。 4U * 1024U * 1024U * 1024U
可以溢出unsigned
数学,但可以根据需要计算size_t
。
size_t sz = (size_t)4 * 1024 * 1024 * 1024;
下面尝试打印常量的大小,这可能是32位或4“字节”而不是它们的值。
printf("Size of 1024U: %ld\n", sizeof(1024U));
printf("Size of 1024U: %ld\n", sizeof(2U));