代码摘要:在3d数组中存储超过1600万个uint8_t作为指向那些uint8_t的指针。C++中的手动内存管理
代码有效,但为什么我只使用uint8_t而不是int保存4 KB。我运行这个相同的代码,它使用330,488K的int,但使用uint8_t它使用330,484。我知道大部分是指针,但不应该(假设每个int使用最小空间)将每个1600万个整数的大小从2个字节减少到1个字节,节省了超过4k个?我认为它应该已经保存到接近16 MB了吗?
通过“运行相同的代码与整数”我从字面上做一个“查找和替换:uint8_t与int”然后重新编译。
uint8_t**** num3d;
num3d = new uint8_t***[256];
for(int i=0;i<256;i++){
num3d[i] = new uint8_t**[256];
for(int j=0;j<256;j++){
num3d[i][j] = new uint8_t*[256];
}
}
// Initialize
uint8_t *B;
for(int lx = 0;lx<256;lx++){
for(int ly= 0;ly<256;ly++){
for(int lz=0;lz<256;lz++){
if(ly == 0 || lx == 0 || lz == 0 || ly == 255 || lx == 255 || lz == 255){
B = new uint8_t(2);
num3d[lx][ly][lz] = B;
continue;
}
if(ly < 60){
B = new uint8_t(1);
num3d[lx][ly][lz] = B;
continue;
}
B = new uint8_t(0);
num3d[lx][ly][lz] = B;
} // inner inner loop
} // inner loop
} // outer loop
我刚看到这个,并且被这个'uint8_t **** num3d;'o_o – Netwave
_'...惊奇,我知道他们必须将内存管理包含在uint8_t未包含的正常整数中。 ...'_你的2个问题中的大多数都是以某种方式写的,我根本无法推断出你真正的问题是什么(我很确定这些问题是你要求的)。 –
两个字:封装和抽象。 *那是你必须学习的东西。然后内存管理自己。 –