MSVCメモリマネージャには、実行された操作に応じてメモリをマークするためにデバッグビルドで使用する特定の16進コードがあります。これらは文書番号hereです。埋め込み時のヒープのMSVC初期化
特に、コード0xCDCDCDCDは、割り当てられているが初期化されていないヒープメモリをマークするために使用されます。私は次のような構造を持っているとします
struct Test
{
bool foo;
int value;
Test() : foo(false), value(0) {}
};
私はこのオブジェクトを割り当てると、私の記憶は、エンディアンが考慮されていない、彼らは次現れるだろうと私は16進数のバイトを書いていることに注意してください(次のようになります。この例の場合)?上記
00 CD CD CD CD 00 00 00 00
、00 CD CD CD
は、4バイト境界で整列さブール値を表します。最後の3バイトは0xCD
です。メモリマネージャがこれらの値をCDに初期化したためです。しかし、実際のブール値の初期化はブール値がマシン上の1バイトしか表さないため、1バイトにしかなりません。
これは正しい動作ですか?
ちょっと好奇心 - なぜあなたは尋ねていますか?なぜあなたはチェックしていないのですか? – littleadv
アラインメントの問題があり、ブール値のメンバの1つが「00 CD CD CD」という値を見ていて、プログラムが最初のバイトを初期化しているだけであることを確認したいからです。四。この場合、なぜ最後の3バイトが0xCD –
@ロバートなのかを説明することができます。アライメント部分の内容に基づいて決めるべきではありません。 –