亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何獲得可用內存C ++ / g ++?

如何獲得可用內存C ++ / g ++?

C++
當年話下 2019-11-27 10:40:21
我想根據可用內存分配緩沖區。這樣,當我進行處理時,內存使用率上升了,但仍然保持在可用內存限制內。有沒有一種方法來獲取可用內存(我不知道虛擬或物理內存狀態會有所不同嗎?)。方法必須與平臺無關,因為它必須在Windows,OS X,Linux和AIX上使用。(如果可能的話,我還想為我的應用程序分配一些可用的內存,在執行過程中它不會改變)。編輯:我做到了可配置的內存分配。我知道這不是一個好主意,因為大多數操作系統都為我們管理內存,但是我的應用程序是ETL框架(打算在服務器上使用,但也作為Adobe indesign的插件在桌面上使用)。因此,我遇到了問題,因為Windows而不是使用swap,而是會返回錯誤的alloc,而其他應用程序則開始失敗。正如我被教導要避免崩潰那樣,所以,我只是試圖優雅地降級。
查看完整描述

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;

}


查看完整回答
反對 回復 2019-11-27
?
holdtom

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,您就可以開始了。


查看完整回答
反對 回復 2019-11-27
?
慕桂英546537

TA貢獻1848條經驗 獲得超10個贊

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


查看完整回答
反對 回復 2019-11-27
  • 3 回答
  • 0 關注
  • 505 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號