鍍金池/ 問答/C  Linux  數(shù)據(jù)庫/ linux中l(wèi)ist.h里面的prefetch()的作用?

linux中l(wèi)ist.h里面的prefetch()的作用?

如題請(qǐng)問這個(gè)prefetch()具體起到一個(gè)什么樣的作用呢?在度娘上看了一下,還是有些懵,或者說什么樣的場景下使用prefetch()更為合適?

#define prefetch(x) NULL
    
#define list_for_each(pos, head) \ 
    for (pos = (head)->next; prefetch(pos->next), pos != (head); \ 
            pos = pos->next)
回答
編輯回答
六扇門
  1. 有一個(gè)共識(shí)是:程序訪問的變量如果都能在系統(tǒng)內(nèi)存cache中則能提升性能,prefetch是內(nèi)核中一個(gè)預(yù)熱內(nèi)存函數(shù),這樣下次遍歷時(shí)就能高效命中內(nèi)存cache,從而提升程序性能。

  2. 上面的代碼中遍歷鏈表時(shí)下次訪問的內(nèi)存為pos->next,故在每次遍歷時(shí)對(duì)pos->next進(jìn)行預(yù)熱,從而提升性能。

2018年8月18日 02:54