减少内存分配GCC命令

时间:2012-10-18 21:26:37

标签: c++ linux gcc memory-management

今天,在我的计算机sciene课程中,我被告知我可以调整程序在编译期间可以分配的内存量(使用GCC,Linux)。默认情况下,此数量设置为最佳模式(这意味着尽可能多)。

在调试我的应用程序期间,我可以从这个编译器功能中受益匪浅,因为我需要正确处理分配错误,这在我的具有超过16 GB RAM的PC上非常棘手。

有谁知道这个选项是什么?我希望像gcc --maxalloc 1024那样,这意味着我的程序最多可以分配1024个字节的内存。

3 个答案:

答案 0 :(得分:7)

我不知道编译器选项。但是,ulimit Linux命令可用于限制进程可以使用的内存量。

例如,以下命令将限制从当前shell运行的应用程序的数据段大小:

ulimit -d 1024K

答案 1 :(得分:2)

最简单的方法是重载全局new/delete运算符并限制可以分配的内存大小。

这完全是C ++,也适用于任何编译器的平台!

答案 2 :(得分:1)

你的问题含糊不清。如果您关心编译期间gccg++编译器使用的内存资源,则可以使用gcc -ftime-report(报告各种GCC阶段的时间和内存)来测量它们。您可以使用棘手的GCC程序参数(有关详细信息,请参阅GCC文档)降低编译器所消耗的资源,或者使用ulimit内置的bash shell来降低内存限制setrlimit(2)系统调用。valgrind系统调用。正如其他人所建议的那样,您还可以使用相同的ulimit内置命令和setrlimit系统调用限制可用内存来运行程序。

但是你可能正在关心程序消耗的内存资源。我建议您使用g++ -Wall -g进行编译,并首先学会使用Boehm's conservative garbage collector(和gdb)来调试内存泄漏。您甚至可以重新定义mallocfree

或者,您可以考虑使用garbage collector。然后,您可以使用GC_malloc代替malloc(或使用new(gc)代替new),您将不再关心free或{{1 }}。但它是一个保守的proc(5)(当你不走运时可能会留下一些内存泄漏)。

要了解某些进程使用的地址空间,请使用{{3}}伪文件系统,特别是delete用于进程1234的映射,或/proc/1234/maps用于映射你自己的过程。 (在终端上运行/proc/self/maps以查看该cat /proc/self/maps命令的内存映射。还有cat命令。