代码块 - 使用大地址感知标志编译

Posted

技术标签:

【中文标题】代码块 - 使用大地址感知标志编译【英文标题】:codeblocks - compile with large-adress-aware flag 【发布时间】:2012-12-26 01:00:45 【问题描述】:

如何使用代码块在 64 位系统上编译带有 LARGE_ADRESS_AWARE 标志的 32 位应用程序?我需要使用超过 2GB 的内存。

【问题讨论】:

【参考方案1】:

应该是将-Wl,--large-address-aware 添加到链接标志的情况。我不使用 CodeBlocks,因此无法告诉您如何逐步执行此操作,但我确信您的项目设置中有一个“链接选项”组件,您可以将此字符串添加到其中。

链接器选项: http://sourceware.org/binutils/docs-2.17/ld/Options.html

编辑:当然,如果你的系统上有足够现代的 gcc-mingw,你应该能够在编译和链接阶段给它 -m64,并获得一个本机 64 位应用程序,此时你可以使用尽可能多的内存(嗯,直到你用完交换空间或 48 位地址范围,以先到者为准 - 可能是交换空间 - 除非你有超过 256TB 的磁盘空间......)

【讨论】:

它仍在使用 SWAP,当它达到 2GB(VRAM 为 1.3GB,RAM 为 800 mb)并需要更多时。实际内存使用量:VRAM 1.3GB,RAM 0.8GB,SWAP 0.8GM,可用内存(ram)1.500GB... 那是另外一回事 - 可能 Windows 像往常一样愚蠢。交换与LARGE_ADDRESS_AWARE 无关。为了证明这一点,尝试编写一段只分配大量内存的代码——比如 100MB 的块,看看有没有LARGE_ADDRESS_AWARE 可以分配多少(你也可以通过写入每个块中每 1M 左右字节 - 你不想填满整个东西,因为填满几 GB 的内存需要几秒钟,即使它没有交换)。不幸的是,我不知道“别跟我傻”的标志……使用 linux?

以上是关于代码块 - 使用大地址感知标志编译的主要内容,如果未能解决你的问题,请参考以下文章

构造代码块

编译原理—基本块划分,循环流图

如果没有大括号的代码块,C# 是不是支持?

求汇编语言将一个内存块拷贝到指定地址的代码

使用 Eigen C++ 需要哪个代码块编译器?

Java锁机制总结