为啥尽管我在变量中使用 malloc 分配更多内存,但当我打印变量的大小时,它仍然显示更少的内存/字节? [复制]
Posted
技术标签:
【中文标题】为啥尽管我在变量中使用 malloc 分配更多内存,但当我打印变量的大小时,它仍然显示更少的内存/字节? [复制]【英文标题】:Why although i'm allocating more memory with malloc in a variable, when i print the variable's size it still shows less memory/bytes? [duplicate]为什么尽管我在变量中使用 malloc 分配更多内存,但当我打印变量的大小时,它仍然显示更少的内存/字节? [复制] 【发布时间】:2021-12-31 03:36:45 【问题描述】:比如你有c语言代码:
int *p = (int *)malloc(8);
由于某种原因,如果我打印指针 p 的大小,即使它有 8 个字节(因为我用 malloc 分配它),当我打印它时它显示为 4:
printf("%i", sizeof(p)); // results on 4
我知道一个整数的默认大小是 4,但我分配的内存比 malloc 的多,我分配了 8 个字节,当我执行 sizeof 时它仍然打印 4,为什么会这样?
【问题讨论】:
给定int *p = ...
和 sizeof(p)
是指针的大小。为什么 4 对于指针不合理?如果代码是int x = 42;
,您希望sizeof(x)
是4 还是42?
大小应该是 8,因为我用 malloc 为指针分配了 8,而当我打印它不是,它是 4,这就是我不理解的。
sizeof(p)
是对象p
的大小,而不是它的某个赋值的值。 p
是一个指针,所以这里它的大小应该是并且是4。
那么我该如何提取对象 p 的大小? (即 8)在代码中?
如果malloc
返回一个非NULL
指针值,则大小为8
,即您在malloc(8)
中请求的数量。因此,如果您想知道大小,它来自8
来自的同一个地方。
【参考方案1】:
在指针上使用sizeof
运算符将为您提供指针本身的大小,在 32 位平台上通常为 4
字节,在 64 位平台上通常为 8
字节。
在指针上使用sizeof
运算符将不会为您提供有关指针指向的对象大小的任何信息。特别是,如果指针指向malloc
分配的结果,它将不会提供有关此分配大小的任何信息。您必须自己跟踪分配的大小,例如将其存储在单独的变量中,因为 C 标准库不提供任何获取此信息的方法。
【讨论】:
以上是关于为啥尽管我在变量中使用 malloc 分配更多内存,但当我打印变量的大小时,它仍然显示更少的内存/字节? [复制]的主要内容,如果未能解决你的问题,请参考以下文章