代碼摘要:在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個問題中的大多數都是以某種方式寫的,我根本無法推斷出你真正的問題是什麼(我很確定這些問題是你要求的)。 –
兩個字:封裝和抽象。 *那是你必須學習的東西。然後內存管理自己。 –