减少内存分配 GCC 命令

Reducing memory allocation GCC command

本文关键字:GCC 命令 分配 内存      更新时间:2023-10-16

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

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

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

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

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

ulimit -d 1024K

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

这是完全C++的,也可以在任何平台上使用任何编译器!

你的问题是模棱两可的。如果您关心gccg++编译器在编译期间使用的内存资源,则可以使用gcc -ftime-report(报告各个 GCC 阶段的时间和内存)来测量它们。你可以使用棘手的 GCC 程序参数来降低编译器编译所消耗的资源 (详解 GCC 文档), 或者通过使用与 setrlimit(2) 系统调用接口的bashshell 的内置ulimit来降低内存限制。正如其他人所建议的,您还可以限制可用内存以使用相同的ulimit内置命令和setrlimit系统调用来运行程序。

但您可能关心程序消耗的内存资源。我建议你用g++ -Wall -g编译,并首先学习使用valgrind(和gdb)来调试内存泄漏。您甚至可以重新定义mallocfree

或者,您可以考虑使用 Boehm 的保守垃圾收集器。然后你会使用GC_malloc而不是malloc(或者使用new(gc)而不是new),你就不会再关心freedelete了。但它是一个保守的垃圾收集器(当你不走运时可能会留下一些内存泄漏)。

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