簡體   English   中英

calloc或malloc可用於在OSX中僅分配物理內存嗎?

[英]can calloc or malloc be used to allocate ONLY physical memory in OSX?

我在玩c函數malloc和calloc,我有一些問題。

我想看看是否可以使用這2個功能來僅分配物理內存,但我的Mac具有4gb或ram,當我使用malloc時,我可以分配的方式大於4gb,這意味着malloc可以分配物理內存和虛擬內存。

我有一些問題:

  1. 有沒有我可以使用的功能,所以我只能分配物理內存(不分配虛擬內存)

  2. 當調用malloc和calloc以及指針返回時,有什么方法可以使用指針來確定分配了多少物理內存以及分配了多少虛擬內存?

一個簡單的例子將不勝感激:)

謝謝你的幫助 :)

簡短的回答:不,不。

長答案:“虛擬內存”並不意味着它存儲在磁盤上,而是意味着其實際位置已被抽象化,因此您的程序無法知道它的實際存儲位置。 這意味着VM系統可以移動“相同”內存,以優化計算機的整體內存使用率。 最初將虛擬內存頁面最初存儲在RAM中,然后(如果一段時間不使用)將頁面調出到磁盤以騰出空間以容納其他東西,然后(當實際訪問時)將頁面調回到RAM中,這是完全正常的。 ,然后退回磁盤,然后退回RAM等。

用戶空間程序始終通過此抽象層訪問所有內存。 也就是說,您的程序無法分配或訪問除虛擬內存以外的任何內容。

有一種稱為“有線”的內存。 它仍然是虛擬的,但是分頁策略不允許將其移出到磁盤。 您的程序無法分配此; 只有內核可以。

我建議閱讀Apple開發人員站點有關內存管理討論以獲取更多詳細信息。

是的,您可以使用mlock()僅在RAM中保留一個內存區域,以避免將其分頁。 它通常用於加密以避免密鑰進入磁盤,從而有可能被攻擊者隨后檢索到。

當然,您可以鎖定在RAM中的內存數量是有限的。 它仍將是虛擬內存,但不會進入磁盤,我想這就是您想要的。

malloc / calloc是圍繞OS進行內存分配的真實調用的libc包裝器(並且我不知道OSX上可能發生了什么),並且它們保留內部緩沖區以避免太頻繁的系統調用。 您應該看到這些調用的libc實現,並查看它們在何處保存數據以及采用哪種格式,以便您可以訪問它們。

暫無
暫無

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

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