[英]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_size
在glibc
上幾乎可以執行此操作。 從手冊頁:
malloc_usable_size()
返回動態分配的緩沖區ptr中可用的字節數,該字節數可能大於請求的大小(但如果請求成功,則保證至少與請求的大小相同)。 通常,您應該存儲請求的分配大小,而不要使用此功能。
注意最后一句話。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.