【发布时间】:2018-12-05 13:57:29
【问题描述】:
我想使用“top”工具来分析一个进程的内存消耗和可能的内存泄漏。 为此我编写了这个程序(程序名:memoryTest):
int main(){
char* q;
for(int i=0; i<100; i++){
q = (char*) malloc(1024);
sleep(1);
}
return 0;
}
有了top我现在可以看这个节目了, 通过在上述过程之后使用选项“o”和过滤器规范“COMMAND = memoryTest”进行过滤,但是我发现该进程的内存消耗没有变化。 我这里有一个愚蠢的错误吗?
【问题讨论】:
-
您的运行时/操作系统可能很聪明,实际上并没有分配您请求但未使用的内存。尝试将内容写入内存。
-
您的编译器进行了优化,malloc 调用已从最终代码中删除。
-
@TungLeThanh 我不完全确定这是否是有效的优化。即使在运行时,您也可以将
malloc调用“重定向”到您自己的带有副作用的函数(例如,通过LD_PRELOAD),编译器在编译时无法知道。相关讨论:stackoverflow.com/q/53373421/580083 -
@DanielLangr:我观察到在编译给定应用程序并激活 -O1(通过 gcc)时的行为。
-
@TungLeThanh 你说得对,理由是
malloc不是一个外部函数,而是一个没有副作用的库函数。因此允许编译器优化它的调用。
标签: c++ memory-leaks memoryanalyzer