【Linux 内核 内存管理】优化内存屏障 ① ( barrier 优化屏障 | 编译器优化 | CPU 执行优化 | 优化屏障源码 barrier 宏 )
文章目錄
- 一、優化屏障 ( 編譯器優化 | CPU 執行優化 )
- 二、優化屏障源碼
一、優化屏障 ( 編譯器優化 | CPU 執行優化 )
" 代碼 “ 編譯成 ” 可執行文件 “ , 執行該 可執行文件 時 , 二進制指令 的 ” 執行順序 " , 與 源碼 的指令順序 并不是完全一致的 , 為了提高 " 可執行文件 " 的執行性能 , 會對程序中的 " 指令 " 進行優化 ;
" 指令 " 優化主要分 222 種 :
- ① 編譯器優化 : 為了 提高程序執行性能 , 編譯器會在 不影響 程序邏輯的前提下 , 對程序指令進行優化 , 主要操作是 調整程序指令的執行順序 ;
- ② CPU 執行優化 : 該優化是為了 提高 " 流水線 " 性能 , 但是 CPU 執行優化會導致 指令亂序執行 , 后面的指令先于前面的指令執行 , 導致 寄存器中的值沖突 ;
" 優化屏障 " 的作用是 避免優化操作 對指令順序 進行重排 , 保障 代碼編譯時 , 在 " 優化屏障 之前 “ 的指令 , 不會在 ” 優化屏障 之后 " 執行 ;
二、優化屏障源碼
在 Linux 中 , " 優化屏障 " 是通過 barrier() 宏定義 實現的 ,
gcc 編譯器 的 " 優化屏障 " 定義在 linux-5.6.18\include\linux\compiler-gcc.h 源碼中 ;
/* Optimization barrier *//* The "volatile" is due to gcc bugs */ #define barrier() __asm__ __volatile__("": : :"memory")
源碼路徑 : linux-5.6.18\include\linux\compiler-gcc.h#20
不同的編譯器 的 " 優化屏障 " barrier() 宏定義 位置不同 , 如
clang 編譯器 的 優化屏障 定義在 linux-5.6.18\include\linux\compiler-clang.h 源碼中 ,
源碼路徑 : linux-5.6.18\include\linux\compiler-clang.h#44
總結
以上是生活随笔為你收集整理的【Linux 内核 内存管理】优化内存屏障 ① ( barrier 优化屏障 | 编译器优化 | CPU 执行优化 | 优化屏障源码 barrier 宏 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Linux 内核 内存管理】RCU 机
- 下一篇: 【Linux 内核 内存管理】优化内存屏