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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么malloc+memset比calloc慢?

為什么malloc+memset比calloc慢?

C
慕尼黑8549860 2019-06-18 16:09:18
為什么malloc+memset比calloc慢?大家都知道calloc與malloc它初始化分配的內(nèi)存。帶著calloc,內(nèi)存設(shè)置為零。帶著malloc,內(nèi)存未清除。所以在日常工作中,我認(rèn)為calloc如malloc+memset..順便說一句,為了好玩,我為基準(zhǔn)測試編寫了以下代碼。結(jié)果令人困惑。代碼1:#include<stdio.h>#include<stdlib.h>#define BLOCK_SIZE 1024*1024*256int main(){         int i=0;         char *buf[10];         while(i<10)         {                 buf[i] = (char*)calloc(1,BLOCK_SIZE);                 i++;         }}守則1的輸出:time ./a.out   **real 0m0.287s**  user 0m0.095s  sys 0m0.192s代碼2:#include<stdio.h>#include<stdlib.h>#include<string.h>#define BLOCK_SIZE 1024*1024*256int main(){         int i=0;         char *buf[10];         while(i<10)         {                 buf[i] = (char*)malloc(BLOCK_SIZE);                 memset(buf[i],'\0',BLOCK_SIZE);                 i++;         }}守則2的輸出:time ./a.out    **real 0m2.693s**  user 0m0.973s  sys 0m1.721s頂替memset帶著bzero(buf[i],BLOCK_SIZE)在代碼2中產(chǎn)生相同的結(jié)果。我的問題是:為什么malloc+memset比calloc?怎么能calloc這么做?
查看完整描述

3 回答

?
largeQ

TA貢獻(xiàn)2039條經(jīng)驗 獲得超8個贊

因為在許多系統(tǒng)上,在空閑的處理時間里,操作系統(tǒng)會自行將空閑內(nèi)存設(shè)置為零,并將其標(biāo)記為安全。calloc()所以當(dāng)你打電話calloc(),它可能已經(jīng)有了免費的零內(nèi)存給你。


查看完整回答
反對 回復(fù) 2019-06-18
?
森林海

TA貢獻(xiàn)2011條經(jīng)驗 獲得超2個贊

在某些平臺上,在某些模式下,malloc在返回內(nèi)存之前將內(nèi)存初始化為一些典型的非零值,因此第二個版本很可能會對內(nèi)存進(jìn)行兩次初始化。


查看完整回答
反對 回復(fù) 2019-06-18
  • 3 回答
  • 0 關(guān)注
  • 1087 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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