c++程序在“空闲”时崩溃内存为零,但备用内存仍然可用

发布于 2024-10-26 18:25:59 字数 294 浏览 2 评论 0原文

我有一个问题:

我需要将大约 260mb 的数据加载到一个结构中(使用 fread)。 Windows 资源管理告诉我,我有:

  • 2346mb 内存正在使用
  • 1478mb 内存处于待机状态
  • 248mb 可用内存

但是,当我运行程序并加载数据时,程序崩溃,因为没有剩余“可用”内存。待机内存还剩 1200MB 左右。

我想,当空闲内存为空时,它会自动将备用内存交换到磁盘并释放更多内存吗?

有什么办法可以避免这个问题还是我做错了什么?

I have a bit of a problem:

I need to load around 260mb of data into a struct (with fread). Windows Resource-Management tells me that I have:

  • 2346mb memory in use
  • 1478mb memory in standby
  • 248mb memory free

However, when I run my program and load the data the program crashes at the point where no more "free" memory is left. There are still around 1200mb of standby memory left.

I thought, when the free mem is empty it will automatically swap the standby-memory to the disk and free more memory?

Is there any way to avoid this problem or am I doing something wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

盛夏已如深秋| 2024-11-02 18:25:59

内存可用并不意味着它是连续的。当您请求这样的大块时,您不太可能得到它,因为可用内存是碎片化的。

Just because the memory is available doesn't mean it's contiguous. When you ask for a big chunk like that, you're unlikely to get it because the available memory is fragmented.

耶耶耶 2024-11-02 18:25:59

您正在耗尽虚拟地址空间,而不是物理内存。正如您所猜测的,通过缩小磁盘缓存然后使用交换文件可以增加物理内存。然而,虚拟地址空间是一个硬性限制。

You're exhausting your virtual address space, not physical memory. As you guessed, physical memory would be augmented be shrinking the disk cache and then by using the swapfile. Virtual address space is a hard limit, however.

凑诗 2024-11-02 18:25:59
  1. 尝试从系统属性更改虚拟内存页面文件大小。
  2. 在程序开始时分配所有所需的内存。 (内存池概念)
  3. 重新启动系统并重试
  1. Try changing Virtual memory page file size from system properties.
  2. At the start of the program allocate all required memory. (Memory Pool concept)
  3. Restart you system and try again
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文