簡體   English   中英

分配適當的內存大小

[英]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 brksbrk是通常在內部用於實現malloc用戶功能的系統調用。

內核以頁面粒度管理進程內存。 這意味着進程地址空間必須按頁面總數增長(或縮小)。
因此,即使sbrk獲得了一定數量的字節,它仍將向該進程添加至少一頁。

暫無
暫無

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

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