减少内存分配 GCC 命令
Reducing memory allocation GCC command
今天,在我的计算机科学课上,我被告知我可以调整我的程序在编译过程中可以分配的内存量(使用GCC,Linux)。默认情况下,此数量设置为最佳模式(这意味着尽可能多)。
在调试应用程序期间,我可以从此编译器功能中受益匪浅,因为我需要正确处理分配错误,这在具有超过 16 GB RAM 的 PC 上非常棘手。
有谁知道这个选项是什么?我希望像gcc --maxalloc 1024
这样的sth,这意味着我的程序最多只能分配1024字节的内存。
我不知道这个编译器选项。但是,ulimit
Linux 命令可用于限制进程可以使用的内存量。
例如,以下命令将限制从当前 shell 运行的应用程序的数据段大小:
ulimit -d 1024K
最简单的方法是重载全局new/delete
运算符并限制可以分配的内存大小。
这是完全C++的,也可以在任何平台上使用任何编译器!
你的问题是模棱两可的。如果您关心gcc
或g++
编译器在编译期间使用的内存资源,则可以使用gcc -ftime-report
(报告各个 GCC 阶段的时间和内存)来测量它们。你可以使用棘手的 GCC 程序参数来降低编译器编译所消耗的资源 (详解 GCC 文档), 或者通过使用与 setrlimit(2) 系统调用接口的bash
shell 的内置ulimit
来降低内存限制。正如其他人所建议的,您还可以限制可用内存以使用相同的ulimit
内置命令和setrlimit
系统调用来运行程序。
但您可能关心程序消耗的内存资源。我建议你用g++ -Wall -g
编译,并首先学习使用valgrind(和gdb
)来调试内存泄漏。您甚至可以重新定义malloc
和free
。
或者,您可以考虑使用 Boehm 的保守垃圾收集器。然后你会使用GC_malloc
而不是malloc
(或者使用new(gc)
而不是new
),你就不会再关心free
或delete
了。但它是一个保守的垃圾收集器(当你不走运时可能会留下一些内存泄漏)。
要进一步了解某个进程使用的地址空间,请使用 proc(5) 伪文件系统, 特别是/proc/1234/maps
进程 1234 的映射, 或者/proc/self/maps
用于你自己进程的映射。(在终端上运行cat /proc/self/maps
以查看该cat
命令的内存映射)。还有pmap
命令。
- 如何使用 gcc 通过命令行限制C++代码的内存使用量?
- GCC-7:错误:无法识别的命令行选项"-M64"
- 如何禁用没有命令行开关的 gcc 警告?
- 将GCC命令转换为Android NDK的CMAKE
- 是否有 gcc 命令可以链接同一目录中的所有 .o 文件并生成.exe文件
- gcc:错误:在 MacOSX 上构建 openjdk9 时'-mstack-alignment=16'无法识别的命令行选项
- 减少内存分配 GCC 命令
- 错误:命令"GCC"失败,退出状态为 1,正在安装 PyMix
- 如何在windows中的gcc中逐行读取命令输出,就像使用标准输入一样
- 是否可以使用C++中的一个make命令,用两个不同的gcc版本编译两个不同可执行文件
- gcc -L 命令混乱
- Gcc 中是否有命令来获取关键字(或函数等)的描述
- 如何修复错误:命令'x86_64-linux-gnu-gcc'失败,退出状态为 1
- gcc:错误:无法识别的命令行选项'-combine
- 无法识别的命令行选项 '-stdlib=libc++' gcc(自制 gcc 5.3.0) 5.3.0
- gcc soname无法识别的命令行
- 编译器命令和GCC版本
- GCC:错误:无法识别的命令行选项'-fforce-mem'
- 在Xcode中使用gcc构建时,如何删除不需要的命令行选项?
- 如何在linux中使用gcc命令编译C代码时包含lib