[英]Unexpected size when using malloc()
我想測試一下自己的知識,寫了一個小程序,長這樣:
#include <iostream>
#include <cstdlib>
int main()
{
int* mem1 = (int*) malloc(2 * sizeof(int));
int* mem2 = (int*) malloc(5 * sizeof(int));
std::cout << "mem1: " << sizeof(mem1) << std::endl;
std::cout << "mem2: " << sizeof(mem2) << std::endl;
return 0;
}
我得到輸出:
mem1: 8
mem2: 8
當我將值更改為malloc(2 * sizeof(int))
到malloc(3 * sizeof(int))
,輸出也不會改變。
這是我使用的教程,所以我不完全確定這是否是內存安全的,在調用malloc
時轉換為int*
。 我也發現了這個問題,但我覺得它對我的情況沒有太大幫助。 Clang++ 是我使用的編譯器,但我認為它沒有任何區別。
我最好的猜測是,它分配了相同的內存,因為它不知道內存在哪里結束。
sizeof
告訴您指針的編譯時大小(即使您根本沒有調用malloc
,它也會報告相同的值)。 沒有符合標准的方法來確定malloc
分配的malloc
; 如果您需要保留該信息,則必須將其存儲在邊帶中。
您看到的8
個字節是指針( int*
)的大小。 sizeof() 在編譯時完成,編譯器無法在編譯時知道這個大小( malloc
是動態內存分配)。
無論分配的內存塊的大小如何,表達式sizeof(mem1)
將始終返回相同的值! 這是因為mem1
是指向已分配內存的指針,並且指針的大小不會改變(即在給定的環境中)。
在您的情況下(大概是在 64 位平台上構建)指針的長度為 8 個字節。 您可以為不同的平台(例如 32 位系統)構建它,並且您可能會得到不同的大小(例如,4); 但是,在該平台上,該大小將始終為 4。
如上所述,這個問題有幾個問題:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.