【发布时间】:2014-05-16 05:18:46
【问题描述】:
我需要确定几个 C 或 C++ 平台上的可用 RAM。
我在这里找到了一些跨平台代码:
https://www.opensource.apple.com/source/text_cmds/text_cmds-84/sort/physmem.c
我的项目的目标平台之一是 OS/400。
我上面链接的代码会返回 OS/400 上实际可用的 RAM 吗?
如果没有,我怎样才能在 OS/400 上获得可用的 RAM?
在短期内,我认为我仅限于使用 C++98 或 C++03,因为 Windows 项目目前在 Visual Studio 2003 中维护。我不知道在什么编译器上使用其他平台。
编辑:一些背景...
我正在开发我的雇主大约 10 年前开发的软件,但直到几个月前我才参与其中。
它使用存储为单个文件的数据库,内部格式分为多个固定大小的页面。
所有平台(我知道的 Windows、Linux、Solaris 和 OS/400)上的当前行为是根据需要将页面加载到内存中(以字符数组的形式),最大为 64 MB。总数据大小约为 1.1 GB。
在 Windows、Linux 和 Solaris 上进行的测试表明,通过增加 64 MB 的限制可以大幅提升性能。
考虑到 cmets,尤其是 Whozcraig 的 cmets,在 OS/400 上什么是合适的行为?
对使用多少“内存”没有限制是否可行?
没有足够的时间为一个很少使用的平台创建一种截然不同的数据结构和行为。
【问题讨论】:
-
如果操作系统有办法查看可用内存量,您可以使用内存查看器在显示它的任何应用程序上找到该值,并使用该地址来获取可用内存值。是的,这很骇人听闻,当操作系统收到补丁时,该地址可能随时更改,因此这不是一个稳定的修复。
-
我一直认为 OS/400 的整个想法是防止人们弄乱诸如“可用 RAM”之类的细节。 :)
-
@oakad - 我不知道是不是这样。我对操作系统或它运行的硬件知之甚少。我只是想通过自动使用更多内存(如果可用)来使一些旧软件运行得更快。
-
@ScottLeis 除了少数例外(实际上很少)OS/400 是一个您不想想要做出内存决策的平台像这样,事实上,人们使用的大多数自缓存算法,将该文件加载到“内存”等,实际上是弄巧成拙。 OS/400 不同于您将体验过的大多数操作系统。其庞大的线性地址空间涵盖了宇宙,它的设计从硬件开始就可以针对内存利用等资源管理做出明智的决策,因此您不必这样做。
-
@WhozCraig - 非常有趣。请查看我对问题的编辑。
标签: c++ c memory ibm-midrange