簡體   English   中英

malloc分配的內存大小

[英]size of memory allocated by malloc

我正在為一個指針分配一個新的內存塊,但是顯然,該塊的大小不是我作為參數傳遞給malloc的大小

char *q="tre";
printf("q in main %zu\n", sizeof(q));
q = (char*)malloc(6);
printf("q in main %zu\n", sizeof(q));

輸出

8
8

但是指針確實指向一個新的內存塊。 這怎么可能?

sizeof返回指針的大小,在您的情況下為(char*) ,它將不提供malloc分配的malloc 將內存大小保留在單獨的變量中,以備后用。

char *q;
printf("%zu\n", sizeof(q));

sizeof(q)是指指針的大小,而不是它指向的內存量。

您獲得的是變量q的大小作為指針類型。 通常,所有指針在程序中的大小都相同。

由於8個字節是64位,因此您似乎正在執行64位應用程序。 :)

sizeof(q)返回指針q的大小,該指針在64位計算機上為8字節,而不是在該指針處分配的內存塊的大小。 sizeof是編譯時間,而不是運行時操作。

我不清楚您要在這里做什么,但是如果您想為位置s的字符串分配足夠的內存,則需要malloc(strlen(s)+1) (對於終止NULL +1)。

也許您想獲取malloc() ed塊的大小。 據我所知,沒有一種可移植的方法來執行此操作,但是malloc_usable_sizeglibc上幾乎可以執行此操作。 從手冊頁:

malloc_usable_size()返回動態分配的緩沖區ptr中可用的字節數,該字節數可能大於請求的大小(但如果請求成功,則保證至少與請求的大小相同)。 通常,您應該存儲請求的分配大小,而不要使用此功能。

注意最后一句話。

暫無
暫無

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

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