boost::pool
のメモリ プールを使用しようとしています#include "boost/pool/pool.hpp"
。
どのくらいのメモリが割り当てられているかを確認したいので、( manページから)を与えるboost::pool
コマンドを実行しますsystem("ps aux | grep myProgramExe | grep -v grep | awk '{print $5}'");
ps
VSZ - virtual memory size of the process in KiB (1024-byte units). Device mappings are currently excluded; this is subject to change. (alias vsize).
私は何か奇妙なことをしています:
コード (コードは 4 つのスペースでインデントされ、さらにリストに埋め込まれているため、さらに 4 つインデントされます)
int main() { { boost::pool<> pool(4, 1); system("ps aux | grep boostHash | grep -v grep | awk '{print \"1. \" $5}'"); void *a = pool.malloc(); pool.free(a); system("ps aux | grep boostHash | grep -v grep | awk '{print \"2. \" $5}'"); } system("ps aux | grep boostHash | grep -v grep | awk '{print \"3. \" $5}'"); }
出力は次のとおりです。
1. 18908
2. 19040
3. 19040
これは奇妙
です。私は 4 バイトだけを割り当てたいと思っていました (これnext allocation
は 1 つのインスタンスのみである必要があります)。
b. ブロックが終了して死んでいる場合、メモリは解放されていませんpool
。
ここで、サイズ 128 のインスタンスを割り当てたいと考えています。次の割り当てでは、次のように 1024 を割り当てたいと考えています。
int main() { { boost::pool<> pool(128, 1024); system("ps aux | grep boostHash | grep -v grep | awk '{print \"4. \" $5}'"); void *a = pool.malloc(); pool.free(a); system("ps aux | grep boostHash | grep -v grep | awk '{print \"5. \" $5}'"); } system("ps aux | grep boostHash | grep -v grep | awk '{print \"6. \" $5}'"); }
出力:
4. 18908
5. 19040
6. 18908
次の理由により、これは問題ありません。
を。バイトを割り当てたかったのです128 * 1024 = 131072
が、バイトを取得しまし19040 - 18908 = 132KB = 135168
た。135168 - 131072 = 4096
バイト(それは単なるプールのオーバーヘッドだと思います)。
b. ブロックが終了すると、メモリが解放されました。
デストラクタ
int main() { { boost::pool<> *pool = new boost::pool<>(128, 1024); system("ps aux | grep boostHash | grep -v grep | awk '{print \"7. \" $5}'"); void *a = pool->malloc(); pool->free(a); delete pool; system("ps aux | grep boostHash | grep -v grep | awk '{print \"8. \" $5}'"); } system("ps aux | grep boostHash | grep -v grep | awk '{print \"9. \" $5}'"); }
出力:
7. 19040
8. 19040
9. 19040
これは奇妙です
、A。何らかの理由で、サイズは既に割り当てられています (.b を呼び出す前に
.b. でサイズが解放されていませpool.malloc()
ん。delete
これは説明可能ですか?プログラムが使用するメモリを確認する
代わりに、別のツールを使用する必要がありますか?ps