第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

malloc / free是libc提供的syscall還是庫(kù)例程?

malloc / free是libc提供的syscall還是庫(kù)例程?

慕妹3146593 2019-12-05 15:11:49
如果malloc / free是作為libc中的庫(kù)例程實(shí)現(xiàn)的,那么它是在sbrk syscall還是mmap syscall或其他東西之上實(shí)現(xiàn)的呢?通常,sys / syscall.h中聲明的函數(shù)是否包含目標(biāo)計(jì)算機(jī)中的所有系統(tǒng)調(diào)用?
查看完整描述

3 回答

?
瀟湘沐

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊

malloc和free是標(biāo)準(zhǔn)C庫(kù)函數(shù),其是由每個(gè)C實(shí)現(xiàn)來(lái)實(shí)現(xiàn)。


C標(biāo)準(zhǔn)僅定義了這些函數(shù)的行為方式以及預(yù)期的行為。在每種實(shí)現(xiàn)方式中如何實(shí)現(xiàn)它們。


簡(jiǎn)而言之,它們是您使用的實(shí)現(xiàn)的實(shí)現(xiàn)細(xì)節(jié)。


(“實(shí)現(xiàn)”由編譯器,鏈接器,運(yùn)行時(shí)庫(kù)以及其他一些東西組成。)


查看完整回答
反對(duì) 回復(fù) 2019-12-05
?
慕碼人8056858

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊

很多時(shí)候,malloc并且free正在使用較低級(jí)別的虛擬內(nèi)存分配服務(wù),并使用諸如mmap和munmap(甚至可能是sbrk)之類的系統(tǒng)調(diào)用一次分配多個(gè)頁(yè)面(甚至兆字節(jié))。相關(guān)時(shí),通常傾向于重用以前的 d存儲(chǔ)空間。大多數(shù)實(shí)現(xiàn)對(duì)“大”和“小”分配使用各種不同的策略,等等。malloc freemalloc


注意,可以限制虛擬地址空間,例如使用setrlimit(2)。在Linux pmap(1)和proc(5)上使用,以了解有關(guān)某個(gè)進(jìn)程的虛擬地址空間的更多信息(例如,/proc/self/maps對(duì)于您自己的進(jìn)程,或者/proc/1234/maps-對(duì)于pmap 1234命令-對(duì)于pid 1234的進(jìn)程)。


您可以查看GNU libc源代碼,其他C標(biāo)準(zhǔn)庫(kù)的源代碼(例如musl-libc),了解malloc實(shí)現(xiàn),選擇其他實(shí)現(xiàn)或自己實(shí)現(xiàn),或者使用strace進(jìn)行實(shí)驗(yàn)性查找。


閱讀syscalls手冊(cè)頁(yè)(即syscalls(2))和<asm/unistd.h>有關(guān)系統(tǒng)調(diào)用列表的文件。


很快 malloc

(我相信這可能是最快的實(shí)現(xiàn)malloc;但是它不是很有用;它符合標(biāo)準(zhǔn))


我堅(jiān)信C標(biāo)準(zhǔn)對(duì)于malloc和非常模糊free。我很確定以下功能會(huì)遵守該標(biāo)準(zhǔn)的文字(但不是精神):


 /* politically incorrect, but very probably standard conforming */

 void *malloc (size_t sz) { if (sz>0) errno = ENOMEM; return NULL; }

 void free(void*ptr) { }

當(dāng)然,您將進(jìn)行編碼calloc并realloc據(jù)此進(jìn)行編碼。


(順便說(shuō)一句,每個(gè)使用的代碼malloc都應(yīng)該測(cè)試其失敗,但是某些錯(cuò)誤地測(cè)試錯(cuò)誤;malloc可以返回NULL失敗,人們應(yīng)該針對(duì)這種情況進(jìn)行測(cè)試)


GNU libc為您提供了自己的函數(shù)的鉤子malloc(您甚至可以透明地通過(guò)它們使用Boehm的垃圾收集器)。這些掛鉤可能會(huì)被棄用并且是非標(biāo)準(zhǔn)的。


如果使用GNU libc,則還要查看mallinfo(3)和malloc_stat(3)以及相關(guān)功能。


查看完整回答
反對(duì) 回復(fù) 2019-12-05
?
繁星coding

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超4個(gè)贊

您也可以使用備用實(shí)施malloc和free如果您使用的是不同的內(nèi)存分配器。例如,the 積內(nèi)存分配器有時(shí)用于提高多線程應(yīng)用程序的性能。


查看完整回答
反對(duì) 回復(fù) 2019-12-05
  • 3 回答
  • 0 關(guān)注
  • 709 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)