【发布时间】:2013-05-13 12:44:02
【问题描述】:
我最近知道一个整数从内存中占用 4 个字节。
首先运行这段代码,并测量内存使用情况:
int main()
{
int *pointer;
}
- 占用了 144KB。
然后我修改代码分配1000个整数变量。
int main()
{
int *pointer;
for (int n=0; n < 1000; n++)
{
pointer = new int ;
}
}
-
然后它占用了 (168-144=) 24KB
但假设 1000 个整数占用 (4bytes x 1000=) 3.9KB。
然后我决定制作 262,144 个整数变量,它们应该消耗 1MB 内存。
int main()
{
int *pointer;
for (int n=0; n < 262144; n++)
{
pointer = new int ;
}
}
令人惊讶的是,现在它需要 8MB
内存使用量随着整数的数量呈指数增长。
为什么会这样?
我使用的是 Kubuntu 13.04 (amd64)
请给我一点解释。
谢谢!
注意:sizeof(integer) 返回4
【问题讨论】:
-
为了好玩,请尝试将
int替换为long double并进行比较。 -
顺便说一句,
int不必是 4 个字节长。在 32 位 Intel CPU(现在过于流行)上它是,但没有什么要求它总是 4 字节。 -
尝试每次循环打印
pointer的值。 -
改用新的 int[262144]。
-
我认为真正的问题是,为什么在了解如何分配内存之前,您要与 CPP 混为一谈……
标签: c++ memory memory-management integer function-pointers