経験豊富なプログラマーのほとんどは、データの配置がプログラムのパフォーマンスにとって重要であることを知っています。必要以上に大きなサイズのバッファを割り当て、アラインされたポインタを begin として使用するプログラムを書いたプログラマを見たことがあります。私のプログラムでそれを行うべきか疑問に思っています.C++の新しい操作によって返されるアドレスのアライメントが保証されるかどうかはわかりません。だから私はテストするための小さなプログラムを書きました
for(size_t i = 0; i < 100; ++i) {
char *p = new char[123];
if(reinterpret_cast<size_t>(p) % 4) {
cout << "*";
system("pause");
}
cout << reinterpret_cast<void *>(p) << endl;
}
for(size_t i = 0; i < 100; ++i) {
short *p = new short[123];
if(reinterpret_cast<size_t>(p) % 4) {
cout << "*";
system("pause");
}
cout << reinterpret_cast<void *>(p) << endl;
}
for(size_t i = 0; i < 100; ++i) {
float *p = new float[123];
if(reinterpret_cast<size_t>(p) % 4) {
cout << "*";
system("pause");
}
cout << reinterpret_cast<void *>(p) << endl;
}
system("pause");
私が使用しているコンパイラは Visual C++ Express 2008 です。新しい操作が返すすべてのアドレスが整列されているようです。しかし、よくわかりません。だから私の質問は: 保証はありますか? 彼らが保証を持っているなら、私は自分自身を調整する必要はありません。