为什么此编译命令说的内存使用情况与valgrind不同?

时间:2018-09-06 09:39:08

标签: gcc memory valgrind

我必须为大学创建一个程序,并且有一个网站可以测试我使用了多少内存。使用相同的输入,如果我在PC上编译程序并使用valgrind运行它,则表明总堆使用量为77k字节,大约为75 kib。

但是当我在网站上提交它时,使用相同的输入,内存使用结果为384 kib,我不知道valgrind在说谎还是网站醉了。我怀疑我用一个简单的程序编译了程序

gcc myprog.c -o myc

大学网站将其编译为:

/usr/bin/gcc -DEVAL -std=c11 -O2 -pipe -static -s -o program programname.c -lm

我对该编译命令一无所知,这位教授只是写道,该命令已在网站上使用,我也可以在自己的PC上使用它。 如果我使用此编译命令,则程序可以正常运行,但是当我尝试在由它创建的可执行文件上使用valgrind时,它将停止并表示无法继续。

所以问题很快就来了,为什么我看到分配的内存有所不同?是因为此编译命令会执行某些操作吗?

1 个答案:

答案 0 :(得分:1)

  

如果我使用此编译命令,则程序运行正常,但是当   我尝试在由它创建的可执行文件上使用valgrind,它停止了   并说它不能继续

您没有提供确切的错误消息,但是无论如何,Valgrind在静态链接的二进制文件(使用-static选项构建的二进制文件中)都无法正常工作,请参阅Valgrind errors when linked with -static -- Why?

  

为什么我看到分配的内存有所不同?

由于您正在构建动态链接的可执行文件,而网站正在构建静态链接的可执行文件,因此请在Static linking vs dynamic linking中查看它们之间的区别。

请注意,Valgrind并不是衡量二进制文件内存使用情况的唯一工具。您还可以使用/usr/bin/time -v <binary_name>并在输出中寻找Maximum resident set size