簡體   English   中英

進程的內存地址空間

[英]Memory address space of a process

我知道Windows 32位最多允許大約2 GB內存地址空間的任何進程。 2兆字節= 2147483648字節。 我嘗試分配的堆內存遠遠超過2147483648字節,但沒有看到錯誤或異常,此代碼:

# include<iostream>

int main(){

    void *x=malloc(2147489999);
    free(x);
    system("pause");
    return 0;
}

是什么原因?

您沒有檢查返回值:)

#include <windows.h>
#include <malloc.h>
#include <stdio.h>
#include<iostream>

#define PAUSE getchar

int 
main(int argc, char *argv[])
{
    void *x=malloc(2147489999);
    if (x)
    {
      printf ("malloc succeeded: 0x%x...\n", x);
      free(x);
    }
    else
    {
      perror ("malloc failed");
    }
    PAUSE ();
    return 0;
}

C:\\ temp> \\ bin \\ vcvars32設置使用Microsoft Visual C ++工具的環境。 C:\\ temp>記事本tmp.cpp

C:\\ temp> cl tmp.cpp用於80x86的Microsoft(R)32位C / C ++優化編譯器版本12.00.8168版權所有(C)Microsoft Corp 1984-1998。 版權所有。

tmp.cpp ... /out:tmp.exe tmp.obj

C:\\ temp> tmp malloc失敗:無錯誤

暫無
暫無

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

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