char *を使用してメモリアクセスを行うクロスプラットフォームコードを記述する際に落とし穴がありますか?クロスプラットフォームコードを書くときにvoid *の代わりにchar *を使う落とし穴はありますか?
UPDATE:たとえば、アドレスがその型のサイズに揃えられている場合、逆参照されたchar *を特定の型(intなど)にキャストする前にチェックする必要がありますか?特定のアーキテクチャでは、アラインされていないアクセスで奇妙な結果が返されますか?
私は、memmoryの問題をデバッグする方法を理解するために、プレイメモリアロケータに取り組んでいます。私はchar *の方がポインタの算術演算を行う能力があり、void *の上でそれらを参照解除する能力があるので望ましいと信じるようになった、それは本当ですか?次の前提は、共通のプラットフォームでは常に同じですか?
sizeof(char) == 1
sizeof(char*) == sizeof(void*)
sizeof(char*) == sizeof(size_t)
'char'インスタンスを逆参照しているのでない限り、' char * 'と' void * 'の両方を指すタイプにキャストする必要があります。 – Aesthete
「保証」されているかどうかわかりませんが、私の経験では最初の2つは安全でなければなりません。最後のもの...? – vdbuilder