このコードをテストして、c++ が実際に new 演算子用に予約したメモリ量を調べました。
#include<iostream>
using namespace std;
int main() {
cout << "alignment of " << alignof(int) << endl;
int *intP1 = new int;
*intP1 = 100;
cout << "address of intP1 " << intP1 << endl;
int *intP2 = new int;
*intP2 = 999;
cout << "address of intP2 " << intP2 << endl;
int *intP3 = new int;
cout << "address of intP3 " << intP3 << endl;
*intP3 = 333;
cout << endl;
cout << (reinterpret_cast<char *>(intP3)-reinterpret_cast<char *>(intP2)) << endl;
cout << intP3-intP2 << endl;
cout << endl;
cout << *(intP1) << endl;
cout << *(intP1+4) << endl;
cout << *(intP1+8) << endl;
cout << *(intP1+16) << endl;
delete intP1;
delete intP2;
delete intP3;
return 0;
}
-std=c++11 フラグを付けてコードをコンパイルして実行した後、x86_64 マシンから取得したものを次に示します。
alignment of int4
address of intP1 = 0xa59010
address of intP2 = 0xa59030
address of intP3 = 0xa59050
the distance of intP3 and intP2 = 32
intP1 value = 100
is this a padding value = 0
intP2 value = 999
intP3 value = 333
new を使用して整数に 4 バイトのメモリを割り当てると、実際には 8 つの整数の合計スペースである 32 バイトのブロックが予約されたようです。c++ アライメントの説明によると、64 ビット マシンの場合、メモリは 16 バイトでアライメントされますが、ここでの距離が 32 バイトなのはなぜですか?
誰かがこれを整理するのを手伝ってくれますか? 前もって感謝します。