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中執行此操作。(不是游戲,網絡,商業或嵌入式軟件)??茖W軟件通常會遍歷數TB的數據來進行一次計算(或運行)(并運行數小時或數周)-所有這些數據都無法存儲在內存中(如果有一天您告訴我,TB對任何PC都是標準的或平板電腦或手機,科學軟件的處理能力有望達到PB或更高。內存量還可以決定有意義的方法/算法的種類。用戶并不總是要決定存儲和方法-他/她還有其他事情要擔心。因此,程序員應該對可用的內容(近來的4Gb或8Gb或64Gb左右)有一個好主意,以決定一種方法將自動運行還是要選擇一種更費力的方法。使用磁盤,但最好使用內存。并且不鼓勵此類軟件的用戶在運行此類軟件時在其計算機上執行過多操作-實際上,他們經常使用專用的機器/服務器。
- 3 回答
- 0 關注
- 505 瀏覽
添加回答
舉報
