簡體   English   中英

malloc未分配指定的內存(64位)

[英]malloc not allocating the specified memory (64 bit)

我的系統上有32 GB的RAM,並希望讀取並在內存中保留15 GB的文件。 當我嘗試執行以下代碼時,輸​​出為:“ n read = 1073741824”,恰好對應於1 GB,而它應該具有與文件大小相對應的讀取字節。

我什至檢查了系統資源管理器的運行情況,並且增加了1GB,這意味着malloc並未按預期分配17 GB的空間。

在64位系統中,我最多可以讀取8TB(在32位系統中,則為2GB或更多特定的1.5GB)。

我在64位計算機和OS上,並且已經按照以下給定的步驟配置了Visual C ++以構建和執行64位二進制文​​件: Intel Link [通過檢查int的大小驗證它是64位-之前是4個字節,現在是8個字節]

為了分配和使用大於1 GB的內存,我可以進行哪些調整?

#include <stdio.h>
#include <cstdlib>

#define PATH "C:\\train"
#define SIZE 17*1024*1024*1024

int main()
{
        FILE * fp = fopen(PATH, "r");
    char* buff = (char*)malloc(SIZE);
    int nRead = fread(buff, 1, SIZE,  fp);
    buff[nRead] = 0;
    printf("n read = %d\n", nRead);

    int a;
    scanf("%d" ,&a);
    return 0;
}

問題是17*1024*1024*1024int類型的文字,而int在Windows上為四個字節寬。 您完全錯誤地認為int在64位Windows中為8字節寬。 不是。 它是4字節寬。 顯然,一個4字節的整數不能保存您想要放入的值。

您需要使用64位整數文字:

17*1024*1024*1024ull

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM