我正在尝试使用boost::pool
来自#include "boost/pool/pool.hpp"
.
我想检查分配了多少内存,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
这很奇怪,因为:
a。我只想分配 4 个字节(next allocation
应该只有 1 个实例)。
湾。当块结束并且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
字节(我认为这只是头顶的池)。
湾。当块结束时,内存被释放。
析构函数
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
这很奇怪,
一个。由于某种原因,已经分配了大小(在我调用
.b 之前)。大小没有pool.malloc()
在.delete
这可以解释吗?
我是否需要使用其他工具而不是ps
查看程序使用的内存?