今天,在我的计算机科学课上,有人告诉我,我可以调整程序在编译期间可以分配的内存量(使用 GCC,Linux)。默认情况下,此数量设置为最佳模式(这意味着尽可能多)。
在调试我的应用程序期间,我可以从这个编译器功能中受益匪浅,因为我需要正确处理分配错误,这在我的具有超过 16 GB RAM 的 PC 上是相当棘手的。
有谁知道这个选项是什么?我希望gcc --maxalloc 1024
这意味着我的程序最多可以分配 1024 字节的内存。
今天,在我的计算机科学课上,有人告诉我,我可以调整程序在编译期间可以分配的内存量(使用 GCC,Linux)。默认情况下,此数量设置为最佳模式(这意味着尽可能多)。
在调试我的应用程序期间,我可以从这个编译器功能中受益匪浅,因为我需要正确处理分配错误,这在我的具有超过 16 GB RAM 的 PC 上是相当棘手的。
有谁知道这个选项是什么?我希望gcc --maxalloc 1024
这意味着我的程序最多可以分配 1024 字节的内存。
我不知道这个的编译器选项。但是,ulimit
Linux 命令可用于限制进程可以使用的内存量。
例如,以下命令将限制从当前 shell 运行的应用程序的数据段大小:
ulimit -d 1024K
The simplest way is to overload global new/delete
operator and limit size of memory that you can allocate.
This is completely C++ and also work on any platform with any compiler!
你的问题模棱两可。如果你关心编译器gcc
或g++
编译器在编译过程中使用的内存资源,你可以通过 using 来衡量它们gcc -ftime-report
(它报告了各种 GCC 阶段的时间和内存)。您可以降低编译器使用棘手的 GCC 程序参数进行编译所消耗的资源(深入了解 GCC 文档以获取详细信息),或者通过使用与setrlimit(2)系统调用接口的 shell的ulimit
内置函数来降低内存限制。正如其他人所建议的那样,您还可以限制可用内存以使用相同的内置命令和系统调用来运行您的程序。bash
ulimit
setrlimit
但是您可能关心程序消耗的内存资源。我建议你编译g++ -Wall -g
并首先学习使用valgrind (and gdb
) 来调试内存泄漏。你甚至可以重新定义malloc
and free
。
或者,您可以考虑使用Boehm 的保守垃圾收集器。然后,您将使用GC_malloc
代替malloc
(或使用new(gc)
代替new
),您将不再关心free
or delete
。但它是一个保守的垃圾收集器(运气不好时可能会留下一些内存泄漏)。
要了解更多某个进程使用的地址空间,请使用proc(5)伪文件系统,特别是/proc/1234/maps
对于进程 1234/proc/self/maps
的映射,或者对于您自己的进程的映射。(cat /proc/self/maps
在终端上运行以查看该cat
命令的内存映射)。还有pmap
命令。