一个动态创建三维数组的内存有关问题
请教大家一个动态创建三维数组的内存问题
BYTE ***PixelBlockArray=new BYTE**[BlockPixelNumHeigth];
for(x=0;x <BlockPixelNumHeigth;x++)
{
PixelBlockArray[x]=new BYTE*[BlockPixelNumWidth];
for(y=0;y <BlockPixelNumWidth;y++)
{
PixelBlockArray[x][y]=new BYTE[mFileHead-> BitCount/8];
}
}
请问我的程序为什么执行完这段创建动态三维数组的代码后,内存占用量增加14兆智多?
而且在1和2循环之间,内存以32K的速度增长,按理只以05K的速度增加阿。 求助大家了,谢谢!!
注:BlockPixelNumHeigth=512
BlockPixelNumWidth=512
mFileHead-> BitCount/8=1
------解决方案--------------------
PixelBlockArray[512] = new BYTE*[512]
一个BYTE* 占4字节,
512 * 512 * 4 = 1,048,576
new BYTE[1];这里虽然需要系统分配一个字节,但是x86的 cpu缓存行的长度为32字节,所以操作系统为了字节对齐,会分配32字节的空间。
so.
512 * 512 * 32 = 8,388,608
差不多10m了
然后,debug方式编译,会占去一些内存用于 debug.
BYTE ***PixelBlockArray=new BYTE**[BlockPixelNumHeigth];
for(x=0;x <BlockPixelNumHeigth;x++)
{
PixelBlockArray[x]=new BYTE*[BlockPixelNumWidth];
for(y=0;y <BlockPixelNumWidth;y++)
{
PixelBlockArray[x][y]=new BYTE[mFileHead-> BitCount/8];
}
}
请问我的程序为什么执行完这段创建动态三维数组的代码后,内存占用量增加14兆智多?
而且在1和2循环之间,内存以32K的速度增长,按理只以05K的速度增加阿。 求助大家了,谢谢!!
注:BlockPixelNumHeigth=512
BlockPixelNumWidth=512
mFileHead-> BitCount/8=1
------解决方案--------------------
PixelBlockArray[512] = new BYTE*[512]
一个BYTE* 占4字节,
512 * 512 * 4 = 1,048,576
new BYTE[1];这里虽然需要系统分配一个字节,但是x86的 cpu缓存行的长度为32字节,所以操作系统为了字节对齐,会分配32字节的空间。
so.
512 * 512 * 32 = 8,388,608
差不多10m了
然后,debug方式编译,会占去一些内存用于 debug.