我想为程序分配更多内存。l 允许您这样做的 gcc 标志是什么?
仅供参考,我想做的是创建一个非常大的矩阵(非常大),稍后将对其进行压缩算法。所以我无法避免创建这么大的矩阵来存储数据。
您的问题非常不清楚,但我怀疑您正在尝试创建一个大型多维数组(矩阵)作为某些函数(可能是主函数)的局部变量(自动变量),而这是失败的。
int foo(int boo, int doo) {
int big_array[REALLY_BIG];
...
Run Code Online (Sandbox Code Playgroud)
这会失败,因为 C 编译器试图在程序系统堆栈上为此类变量腾出空间。编译器可能会在尝试考虑堆栈上如此大的内容时失败(特别是对齐问题可能会使其变得更大),或者它可能会生成代码来尝试执行此操作,并且 CPU 无法运行它,因为堆栈指针相对索引受到限制,或者因为操作系统对程序的系统堆栈的大小进行了限制。
可能有多种方法可以更改操作系统限制,但如果是 CPU 限制,则您将不得不采取不同的做法。
对于某些事情,最简单的方法就是使用全局变量或static变量来处理像这样的大型数据。这样做最终会在编译时或程序加载时(就在运行时之前)为数据分配空间,但会限制您拥有多个副本的能力,因为您必须提前计划以声明足够的全局变量同时保留您想要的所有内容。
您也可以尝试使用malloc或calloc为您分配内存。
第三个选项是(如果您使用的是 *nix 系统)将内存映射包含矩阵的文件。查看mmap系统调用。
mmap使用或或 全局变量的另一个好处static是,在大多数操作系统下,虚拟内存管理器可以使用原始文件(包含 mmap 矩阵的文件,或静态或全局的可执行文件)作为内存的交换空间数据用途。这使得您的程序可以运行而不会对物理内存或虚拟内存管理器造成太大压力。
| 归档时间: |
|
| 查看次数: |
16514 次 |
| 最近记录: |