您应该能够分配多少内存?

2023-11-25

背景:我正在编写一个处理大量地理数据的 C++ 程序,并希望一次性加载大块进行处理。我只能使用为 32 位机器编译的应用程序。我正在测试的机器运行 64 位操作系统 (Windows 7),并拥有 6 GB 内存。使用 MS VS 2008。

我有以下代码:

byte* pTempBuffer2[3];
try
{
    //size_t nBufSize = nBandBytes*m_nBandCount;
    pTempBuffer2[0] = new byte[nBandBytes];
    pTempBuffer2[1] = new byte[nBandBytes];
    pTempBuffer2[2] = new byte[nBandBytes];
}
catch (std::bad_alloc)
{
    // If we didn't get the memory just don't buffer and we will get data one
    // piece at a time.
    return;
}

我希望能够分配内存,直到应用程序达到 32 位寻址的 4 GB 限制。然而,当 nBandBytes 为 466,560,000 时,new 在第二次尝试时会抛出 std::bad_alloc 。在此阶段,进程的工作集(内存)值为 665,232 K 因此,我似乎无法分配哪怕是一千兆内存。

有人提到 32 位 Windows 中的应用程序有 2 GB 的限制,可以使用 win32 的 /3GB 开关将其扩展到 3 GB。在那种环境下这是一个很好的建议,但与本例无关。

在 64 位操作系统下,您应该能够为 32 位应用程序分配多少内存?


操作系统想给你多少就给多少。默认情况下,Windows 允许 32 位进程拥有 2GB 的地址空间。这被分成几个块。一个区域用于堆栈,其他区域用于加载的每个可执行文件和 dll。剩下的任何东西都可以动态分配,但不能保证它会是一大块连续的块。它可能是几个较小的块,每个块只有几百 MB。

如果使用 LargeAddressAware 标志进行编译,64 位 Windows 将允许您使用完整的 4GB 地址空间,这应该会有所帮助,但一般来说,

  • 您不应该假设可用内存是连续的。您应该能够使用多个较小的分配,而不是几个大的分配,并且
  • 如果您需要大量内存,则应将其编译为 64 位应用程序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

您应该能够分配多少内存? 的相关文章

随机推荐

  • 如何将 Visual Studio Code 终端输出设置为英语

    我的环境是 Visual Studio 代码 英语 Windows 10 日语 当我尝试使用终端添加包时 它以日语输出消息 但我希望它能用英语输出它们 我已经找到了解决方案 由于终端使用PowerShell 因此我们应该设置powershe
  • 将图像分割成更小的图像的算法,减少空白量并指定最大矩形量

    我正在寻找一种算法 可以将图像分割成更小的图像 但有一些限制 一个限制是使用最少量的 空白 即空像素 另一个是指定将其分割成的最大图像数量 例如 让我们看一下下图 其中有很多 空白 我想将此图像分成几个其他图像 这样我就可以减少该图像占用的
  • 如何在Android中播放歌曲-phonegap [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 目前不接受答案 一个月前 我开始使用phonegap html5 css3 和jQtouch 我正在开发一个应用程序 我需要在该应用程序中播放声音 我对这项任务有一个严重的问题 首先 我发现
  • asp.net sessionID 在回发时发生变化?

    我正在编写一个在缓存中存储对象的 ASP NET 应用程序 当页面第一次加载时 它会检查缓存中是否有该对象 如果存在 它将使用该对象 如果该对象不存在 它将重新构建它并将其存储在缓存中 由于多个用户可以同时使用此应用程序 因此我尝试将对象存
  • 未对齐的内存访问:是否定义了行为? [复制]

    这个问题在这里已经有答案了 考虑以下代码 include
  • 对“REST”一词及其含义的误解是什么[关闭]

    Closed 这个问题是基于意见的 目前不接受答案 弄清楚什么是真正的 RESTful 应用程序和 或 api 并不总是那么容易 因为对 REpresentational State Transfer 架构风格的含义和范围存在某种误解 最初
  • 计算 MKMapView 中 MKPolygon 的面积

    我只是不知道如何计算 MKMapView 上的面积 有谁解决过这个问题吗 这是我的代码 但它返回太多 func ringArea gt Double var area Double 0 if templocations count gt 2
  • Strapi 路线返回 404 未找到

    我遇到一个问题 API 中的所有路由都返回404 Not found 我跟着从 Docker Hub 拉取部分位于Strapi strapi docker 除了运行图像之外 我所做的是创建一个名为的新内容类型post包含三个字段 如果我尝试
  • 当用户正在编写时,如何在 RichTextBox 中使用不同的颜色为不同的单词着色,并在单击该彩色文本时引发事件

    当用户在富文本框中写入一些单词时 如果该单词与某个特定单词匹配 则该单词的颜色应该自动更改 当用户单击特定的彩色文本时 它应该引发一个事件 鉴于要求 1 用户在 RichTextBox 控件中插入一些文本 2 如果输入的单词是预定义单词列表
  • AngularJS从属性文件中读取

    在 angularJS 中 如何从属性文件中读取值 connection properties url http localhost 8080 user me get GET post POST 应用程序 js var app angula
  • Node.js如何在快速路由中使用socket.io

    在我的 node js 脚本之一中 我尝试在快速路由中使用 socket io 我发现了很多类似的问题 并尝试按照建议实施解决方案 但没有任何结果 可能是因为我对快递路线不了解 我点击了下面的链接 如何在 Node js 的快速路由中使用
  • JSX (React) 中的花括号意味着什么?

    例如 要在反应中设置样式 您可以这样做 var css color red and h1 Hello world h1 为什么第二个代码片段中的 css 需要大括号 大括号是一种特殊的语法 让 JSX 解析器知道它需要将它们之间的内容解释为
  • Javascript 警报和 php 标头

    我遇到了一个小问题 当我得到没有标题的 PHP 脚本时 一切都很好 我收到了 javascript 警报框 但是当我在警报之前使用标题时它不起作用 它按应有的方式重定向我 但没有显示任何框 有人可以帮助我吗 if pkt lt 1 OR u
  • C/C++ 中的任意大小整数

    Question 有没有办法使用 c c 创建任意大小的整数 例如 int main void Int i Int 3 3 bit integer i 1 Represented as 001 Bonus 有没有办法对浮动值执行相同的操作
  • @AppStorage 变量上出现“调用初始化程序时没有完全匹配”错误?

    我收到以下错误 No exact matches in call to initializer on my 应用存储下面的变量 模型 swift class UserSettings ObservableObject AppStorage
  • 如何在 php 中组合 2 个关联数组,以便在所有情况下都不会覆盖任何重复的条目?

    我有两个关联数组 它们有许多相同的内容 所以我想以这样的方式组合这两个数组 如果我有a在数组 1 和a在数组 2 中比在数组 3 中我应该有两个条目a s而不是 1 我尝试过使用 array merge 但如果第二个数组中有任何重复项 它会
  • rmagick 有没有办法转换内存中的图像

    From Rmagick guide 将图像转换为另一种格式 将图像转换为另一种格式就像编写 图像到文件 ImageMagick 使用输出文件名suffix jpg for JPEG gif for GIF for example or p
  • 在 shell 中一行运行多个命令

    说我有一个文件 templates apple我想要 把它放在两个不同的地方 然后 删除原件 So templates apple将被复制到 templates used AND templates inuse然后我想删除原来的 Is cp
  • gdb 中的 是否有问题?

    我有一个仅在 O2 优化中崩溃的应用程序 使用 gcc 4 2 4 编译 当我单步执行代码并到达崩溃的位置并尝试检查该值时 我在 gdb 中得到了 优化后的值 我在互联网上读到这意味着该值存储在寄存器中 我想知道我的崩溃是否可能与某些信息放
  • 您应该能够分配多少内存?

    背景 我正在编写一个处理大量地理数据的 C 程序 并希望一次性加载大块进行处理 我只能使用为 32 位机器编译的应用程序 我正在测试的机器运行 64 位操作系统 Windows 7 并拥有 6 GB 内存 使用 MS VS 2008 我有以