我试图解释我在
Linux中应用程序的内存.我做了一个基本的测试,并发现如果我们新建一些内存,它为一个新的分配了至少32个字节.
这是我的代码.
#include
#include
using namespace std;
int main(int argc, const char** argv)
{
int iBlockSize = atoi(argv[1]);
int iBlockCount = atoi(argv[2]);
for (int i = 0 ; i < iBlockCount ; i++)
{
cout << (int*)(new char[iBlockSize]) << endl;
}
return 0;
};
当我执行./a.out 8 100时,它给出了以下结果.
....
....
....
0xf6db10
0xf6db30
0xf6db50
0xf6db70
0xf6db90
0xf6dbb0
0xf6dbd0
0xf6dbf0
0xf6dc10
0xf6dc30
0xf6dc50
0xf6dc70
我得到的所有内存都有32个字节的间隙.
直到24(BlockSize)它是一样的.如果超过24,则为48字节.
./a.out 25 100
....
....
....
0x18b30c0
0x18b30f0
0x18b3120
0x18b3150
0x18b3180
0x18b31b0
0x18b31e0
0x18b3210
0x18b3240
0x18b3270
0x18b32a0
当我为更大尺寸测试时;我们发现我们得到的内存增加了16个字节块,至少保留了8个字节的开销.
我的问题是,
>我的测试是否正确?
>这是linux内存管理的正确行为吗?
>如果我们新的8字节,我们得到32.其他24发生了什么?重用或分段开销?