我有一个程序:
#include <iostream>
using namespace std;
int main(){
const int SIZE = 1000;
typedef int* IntPointer;
IntPointer ip;
do {
ip = new int[ SIZE ];
cout << "Memory allocated " << endl << flush;
} while (ip != nullptr);
}
此代码用于测试每次循环时ip使用的内存量。 我试图打印出ip的值,这是十六进制的内存地址我相信,我可以看到它每次循环一次,地址将在dec中增加4000。那么,每个ip占用4000字节内存是否正确?我想知道是否有任何函数来获取每个ip使用的内存值?如果没有,我如何获得循环内累积内存使用的大小? 感谢你的回答。谢谢!
答案 0 :(得分:0)
您可以使用sizeof()函数来获取字节大小。但请确保取消引用指针,否则您将获得指针本身的大小,而不是它指向的内存。再加上一个注释,请确保您可以释放指针分配的内存。与堆栈不同,你放在堆上的任何东西都是你自己的问题。 (你可能已经意识到了,但重申并不是很痛苦。)
在你的代码中,大多数数据都会丢失,因为你的指针一次只能指向一件事。
编辑:现在正确阅读,是的,你只能得到数组的大小。解除引用只会给你第一个元素的大小。但是你知道数组的数量,所以你可以简单地相乘。如果你的元素大小不同(在你的情况下他们不能),我不完全确定你会做什么。
答案 1 :(得分:0)
没有可移植的方法来获取在运行时分配的内存量。您可以通过跟踪大小并使用数组的sizeof(int)*SIZE
字节来获取内存量。您无法使用sizeof在运行时获取内存。 sizeof是一个编译时运算符。
内存分配器还将在内部分配一个结构来跟踪内存块及其大小,但是这个簿记结构通常不是你需要考虑的,除非你想创建自己的内存分配器。
答案 2 :(得分:0)
我不知道为什么你必须分配内存来了解这一点。
要获得下面一个指针的大小,
cout << "Memory allocated for one IntPointer :"<<sizeof(IntPointer);
要获得1000个Int *对象的大小,请使用如下,
cout << "Memory allocated for "<< SIZE <<" IntPointers :"<<sizeof(IntPointer*SIZE );
当你为1000 int *分配内存时,你得到4000,即4 * 1000 = 4000。
答案 3 :(得分:0)
整数在您的系统上4个字节。所以有一个1000的int数组 - &gt; 4000字节。那是对的。 std::cout << sizeof(int) << std::endl;
函数将显示您的整数大小为4个字节。