高性能コンピューティング(10 ^ 5-10 ^ 6コア)にMPIを使用するプロジェクトのために、他の誰かのC ++コードをレビューしています。コードは、異なるアーキテクチャ上の(潜在的に)異なるマシン間の通信を可能にすることを目的としています。彼は次のようにコメントを書いています。
通常は
new
andを使用しますdelete
が、ここではmalloc
and を使用していfree
ます。これが必要なのは、一部のコンパイラは、new
使用時にデータに異なるパディングを行うため、異なるプラットフォーム間でのデータ転送でエラーが発生するためです。これはで発生しませんmalloc
。
これは、私が標準new
対malloc
質問から知っている何にも適合しません。
new / deleteとmalloc / freeの違いは何ですか?コンパイラがオブジェクトのサイズを異なる方法で計算する可能性があるという考えをほのめかします(しかし、なぜそれが使用と異なるのsizeof
ですか?)
mallocと配置new vs. newはかなり人気のある質問ですがnew
、malloc
そうでない場合のコンストラクタの使用についてのみ話しますが、これは関係ありません。
mallocはどのようにアラインメントを理解しますか?メモリはどちらかと適切に整列することが保証されているか、new
またはmalloc
私が以前考えていたものであると述べています。
私の推測では、彼は過去に自分のバグを誤って診断し、それを推定しnew
てmalloc
、異なる量のパディングを提供していると思いますが、これはおそらく正しくないと思います。しかし、Googleや以前の質問で答えを見つけることができません。
StackOverflow、私を助けてください、あなたは私の唯一の希望です!
malloc
やnew
、などnew
一部の環境でブロックを割り当て、先頭にいくつかのデータを追加し、右このデータの後の場所へのポインタを返します。(私は、データブロック内で、他の人と同意、malloc
およびnew
パディングの同じ種類を使用する必要があります。)