C 编程 - 大小为 2U 和 1024U



我知道 U 字面在 c 中的意思是,值是一个无符号整数。无符号标记器大小为 4 个字节。

但是 2U 或 1024U 有多大?例如,这是否仅表示 2 * 4 字节 = 8 字节,或者此表示法是否意味着 2(或 1024)是无符号整数?

我的目标是弄清楚如果我像这样调用 malloc 将分配多少内存

int *allocated_mem = malloc(2U * 1024U);

并在一个简短的程序中证明我的答案我尝试过什么

printf("Size of 2U: %ldn", sizeof(2U));
printf("Size of 1024U: %ldn", sizeof(1024U));

我会为第一行分配 2 * 4 字节 = 8 的大小,对于第二行,例如 1024 * 4 字节 = 4096,但输出始终为"4"。

真的很欣赏 2U 和 1024U 的确切含义以及如何在 C 中检查它们的大小?

我的目标是弄清楚如果我像这样调用 malloc 将分配多少内存int *allocated_mem = malloc(2U * 1024U);

2 * 1024 == 2048有什么难点? 它们是无符号文本这一事实不会改变其值。


无符号标记器大小为 4 个字节。(原文如此)

你是对的。 所以2U占用 4 个字节,1024U占用 4 个字节,因为它们都是无符号整数。


我会为第一行分配 2 * 4 字节 = 8 的大小,对于第二行,例如 1024 * 4 字节 = 4096,但输出始终为"4"。

为什么该值会更改大小? 大小取决于类型。2U的类型为unsigned int,因此占用 4 个字节;同50U,同1024U。 它们都需要4 个字节

您正在尝试将值 (2) 乘以类型的大小。 这是没有道理的。

有多大?

2U1024U的大小相同,大小相当于一个unsigned,通常为32位或4个"字节"。 类型的大小在整个给定平台中是相同的 - 它不会因为而改变。

"我知道 U 字面意思是 c 中的值,值是一个无符号整数。" --> 好的,到目前为止足够接近了。

"无符号整数大小为 4 个字节。 合理的猜测,但 C 要求unsigned至少为 16 位。 此外,U使常量无符号,但这可能是unsignedunsigned longunsigned long long,这取决于和平台。

细节:在 C 中,2U不是文字,而是常。 C 具有字符串文本和复合文本。 文字可以获取其地址,但&2U不是有效的 C。 其他语言称2U文字,并对其使用方式有其规则。

我的目标是弄清楚如果我像这样调用 malloc 将分配多少内存int *allocated_mem = malloc(2U * 1024U);

相反,最好使用size_t来调整大小,而不是unsigned并检查分配。

size_t sz = 2U * 1024U;
int *allocated_mem = malloc(sz);
if (allocated_mem == NULL) allocated_mem = 0; 
printf("Allocation size %zun", 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: %ldn", sizeof(1024U));
printf("Size of 1024U: %ldn", sizeof(2U));

相关内容

  • 没有找到相关文章

最新更新