![](/img/trans.png)
[英]Allocating the proper memory for a function that recieves a structure
[英]Allocating proper memory size
我在程序中分配合適的內存大小時遇到問題。 我執行以下操作:
void * ptr = sbrk(sizeof(void *)+sizeof(unsigned int));
當我這樣做時,我認為它為堆添加了過多的內存,因為它以void *而不是字節為單位分配內存。 如何告訴我我想要sizeof( what )表示什么字節而不是其他任何單位?
編輯:
我已經看到其他人將事物轉換為char,以便編譯器采用字節大小。 如果sizeof(unsigned int)是4個字節,但是我使用的類型是void *,那么編譯器會破壞void *大小的4倍而不是4個字節嗎?
傳遞多個字節作為sbrk
的參數。
在Linux中, sbrk
的原型為:
void *sbrk(intptr_t increment);
http://www.kernel.org/doc/man-pages/online/pages/man2/brk.2.html
sbrk()通過增加字節來增加程序的數據空間。
但是正如某些人在注釋中所添加的那樣,如果要動態分配內存,則需要的是malloc
函數而不是sbrk
。 brk
和sbrk
是通常在內部用於實現malloc
用戶功能的系統調用。
內核以頁面粒度管理進程內存。 這意味着進程地址空間必須按頁面總數增長(或縮小)。
因此,即使sbrk
獲得了一定數量的字節,它仍將向該進程添加至少一頁。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.