2.記憶體模型中的可見性,原則性,有序性
原子性(多執行緒情況下)
原子性是指乙個操作是不可中斷的。即使是在多個執行緒一起執行的時候,乙個操作一旦開始,就不會被其他執行緒干擾。
用i++來做為舉例,需要read,load,use,等等的操作,單個操作是原子性的,但是對應整個操作i++來說是不能保證原子性的,
b,可見性
可見性是指當乙個執行緒修改了某乙個共享變數的值,其他執行緒是否能夠立即知道這個修改。
保證可見性的方法:
volatile(讓其他執行緒的工作記憶體中的資料失效,重新從主存中load)
synchronized(unlock之前,寫變數值回主存)
final(一旦初始化完成,其他執行緒就可見)。
c,有序性
從單執行緒來看,j**a**看是有序的,但是j**a編譯器在編譯**的時候,為了提高效能等因素,會考慮進行指令重排,不影響原意的情況下,原有書序被打亂
指令重排的基本原則:
c 之記憶體模型
c 程式在執行時,將記憶體大方向劃分為4個區域 區 存放函式體的二進位制 由作業系統進行管理 你寫的 都轉化成二進位制 全域性區 存放全域性變數和靜態變數以及常量 棧區 由編譯器自動分配和釋放,存放函式的引數值,區域性變數等 堆區 由程式設計師分配和釋放,若程式設計師不釋放,程式結束時由作業系統 記...
C 之記憶體模型 記憶體區域
2.malloc calloc realloc底層實現原理 2.2 calloc底層實現原理 2.3 realloc底層實現原理 2.4 分配虛擬記憶體的細節 2.5 free函式實現原理 3.new delete底層實現 4.相關面試題 3.應用 1 棧上的分配極為簡單,移動一下棧指標而已。2 棧...
python高階之記憶體模型
每乙個程式語言的背後都有自己獨特的記憶體模型支援,比如最經典的c語言,乙個int型別佔8位元組。那麼在python中不區分資料型別,定義乙個變數其在內存在占用多少位元組呢?python中資料的運算其記憶體是如何變化的呢?python一切資料皆為物件,python中的物件分成兩類 可變物件和不可變物件...