面試之記憶體模型

2022-09-14 11:51:10 字數 555 閱讀 6255

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中的物件分成兩類 可變物件和不可變物件...