读书人

一个动态创建三维数组的内存有关问题

发布时间: 2012-03-01 10:25:47 作者: rapoo

请教大家一个动态创建三维数组的内存问题
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.

读书人网 >C++

热点推荐