7

char* を使用して、メモリ アクセスを行うクロス プラットフォーム コードを記述する場合に落とし穴はありますか?

更新: たとえば、逆参照された char* を特定の型 (int など) にキャストする前に、アドレスがその型のサイズに合わせて配置されているかどうかを確認する必要がありますか? 特定のアーキテクチャは、アライメントされていないアクセスで奇妙な結果を返しますか?

メモリの問題をデバッグする方法をよりよく理解するために、プレイ メモリ アロケータに取り組んでいます。ポインター演算を実行し、void* よりも逆参照できるため、char* の方が好ましいと考えるようになりましたが、本当ですか? 次の仮定は、さまざまな一般的なプラットフォームで常に当てはまりますか?

sizeof(char) == 1
sizeof(char*) == sizeof(void*)
sizeof(char*) == sizeof(size_t)
4

1 に答える 1

5

sizeof(char)==1は間違いなく常に真です。

sizeof(char *) == sizeof(void *)おそらく常に真です。C 標準では、それらが同じ表現を持つ必要があり、これは少なくとも同じサイズを強く意味します。

sizeof(char *) == sizeof(size_t)絶対に依存することはできません-私はそれが間違っている実装を知っています(そして、それらはおそらく標準に完全に準拠していませんが、これは彼らの問題の1つではありません)。

于 2012-10-24T05:01:17.597 に答える