3 回答
TA贡献1757条经验 获得超8个赞
阅读完这些答案后,我感到惊讶的是,有这么多人以为OP的计算机内存属于他人。这是他的电脑,他的记忆做,因为他认为合适的,即使它伤了其他系统采取了要求它。这是一个有趣的问题。在一个比较原始的系统上,我memavail()会告诉我这一点。为什么OP不占用其他系统就不会占用他过多的内存?
这是一种分配少于一半可用内存的解决方案。输出为:
必填FFFFFFFF
必填7FFFFFFF
必填3FFFFFFF
分配的内存大小= 1FFFFFFF
#include <stdio.h>
#include <stdlib.h>
#define MINREQ 0xFFF // arbitrary minimum
int main(void)
{
unsigned int required = (unsigned int)-1; // adapt to native uint
char *mem = NULL;
while (mem == NULL) {
printf ("Required %X\n", required);
mem = malloc (required);
if ((required >>= 1) < MINREQ) {
if (mem) free (mem);
printf ("Cannot allocate enough memory\n");
return (1);
}
}
free (mem);
mem = malloc (required);
if (mem == NULL) {
printf ("Cannot enough allocate memory\n");
return (1);
}
printf ("Memory size allocated = %X\n", required);
free (mem);
return 0;
}
TA贡献1805条经验 获得超10个赞
在类似UNIX的操作系统上,存在sysconf。
#include <unistd.h>
unsigned long long getTotalSystemMemory()
{
long pages = sysconf(_SC_PHYS_PAGES);
long page_size = sysconf(_SC_PAGE_SIZE);
return pages * page_size;
}
在Windows上,有GlobalMemoryStatusEx:
#include <windows.h>
unsigned long long getTotalSystemMemory()
{
MEMORYSTATUSEX status;
status.dwLength = sizeof(status);
GlobalMemoryStatusEx(&status);
return status.ullTotalPhys;
}
因此,只需花一些时间#ifdef,您就可以开始了。
TA贡献1848条经验 获得超10个赞
对于科学软件,有理由要在HPC中执行此操作。(不是游戏,网络,商业或嵌入式软件)。科学软件通常会遍历数TB的数据来进行一次计算(或运行)(并运行数小时或数周)-所有这些数据都无法存储在内存中(如果有一天您告诉我,TB对任何PC都是标准的或平板电脑或手机,科学软件的处理能力有望达到PB或更高。内存量还可以决定有意义的方法/算法的种类。用户并不总是要决定存储和方法-他/她还有其他事情要担心。因此,程序员应该对可用的内容(近来的4Gb或8Gb或64Gb左右)有一个好主意,以决定一种方法将自动运行还是要选择一种更费力的方法。使用磁盘,但最好使用内存。并且不鼓励此类软件的用户在运行此类软件时在其计算机上执行过多操作-实际上,他们经常使用专用的机器/服务器。
- 3 回答
- 0 关注
- 457 浏览
添加回答
举报