最近、Cコードでメモリリークを処理しています。私は、異なるハードウェアアーキテクチャで異なるメモリリークを見ることに驚いています。異なるハードウェアアーキテクチャでメモリリークが異なる
以下は夏64ビットアーキテクチャにvalgrindので示すリークである:
LEAK SUMMARY:
==4064== definitely lost: 1,600,192 bytes in 7 blocks
==4064== indirectly lost: 0 bytes in 0 blocks
==4064== possibly lost: 0 bytes in 0 blocks
==4064== still reachable: 3,217,416 bytes in 2,155 blocks
==4064== suppressed: 0 bytes in 0 blocks
==4064== Reachable blocks (those to which a pointer was found) are not shown.
==4064== To see them, rerun with: --leak-check=full --show-reachable=yes
==4064==
==4064== For counts of detected and suppressed errors, rerun with: -v
==4064== ERROR SUMMARY: 7 errors from 7 contexts (suppressed: 4 from 4)
そして以下がその理由であることができるどのような32ビットアーキテクチャ
LEAK SUMMARY:
==29607== definitely lost: 1,600,048 bytes in 4 blocks .
==29607== indirectly lost: 456 bytes in 33 blocks.
==29607== possibly lost: 0 bytes in 0 blocks.
==29607== still reachable: 96 bytes in 12 blocks.
==29607== suppressed: 0 bytes in 0 blocks.
==29607== Reachable blocks (those to which a pointer was found) are not shown.
==29607== To see them, rerun with: --show-reachable=yes
するためのものです。
出力は通常終了プログラム用ですか?失敗したときに存在すると、別の場所で失敗する可能性があります。クラッシュは通常メモリ管理と関係がありますが、アーキテクチャごとに前後でクラッシュする可能性があります。また、64ビットでは通常32ビット(つまりポインタのサイズなど)よりも多くのメモリを使用することに注意してください。 –
アーキテクチャのいずれかでメモリリークを防ぐことができたら、どちらのアーキテクチャでも動作しますか? – thetna
正しいプログラムは漏れません:) –