我需要确定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)上的当前行为是根据需要将页面加载到内存(以char数组的形式),最大为64 MB。总数据大小约为1.1 GB
通过增加64 MB的限制,在Windows,Linux和Solaris上进行测试可以显着提高性能。
考虑到评论,尤其是Whozcraig的评论,OS / 400上的适当行为是什么?
是否能够对内存和内存的数量没有限制?使用?
没有足够的时间为一个很少使用的平台创建一个截然不同的数据结构和行为。
答案 0 :(得分:2)
正如评论者所指出的,您针对潜在问题(在背景部分)所采取的方法对于这个特定平台是有问题的。但是,抛开这一点,只关注关于如何确定可用 RAM 量的最初问题,答案如下:
要找出您正在运行的 LPAR 可用的 RAM,您可以调用 dlpar_get_info
API。您需要#include <qpmlpmgt.h>
,然后执行以下操作:
dlpar_info_format1_t info1;
int rc = dlpar_get_info(&info1, dlpar_info_format1_ID, sizeof(dlpar_info_format1_t));
if (rc < 0) { /* Handle error */ }
else {
printf("Maximum Memory (MB): %llu\n", info1.max_memory);
printf("Minimum Memory (MB): %llu\n", info1.min_memory);
printf("Memory Increment (MB): %llu\n", info1.memory_region);
printf("Defined Memory (MB): %llu\n", info1.def_mem);
}
请注意,此 API 在 V5R3 中是新的。