共享内存 传一个类指针_共享内存介绍:Shared Memory
In computer hardware, shared memory refers to a (typically large) block of random access memory (RAM) that can be accessed by several different central processing units (CPUs) in a multiprocessor computer system.
在多處理器的計(jì)算機(jī)系統(tǒng)中,共享內(nèi)存指可以被不同中央處理器(CPU)訪問(wèn)的大容量?jī)?nèi)存。
共享內(nèi)存
In computer science, shared memory is memory that may be simultaneously accessed by multiple programs with an intent to provide communication among them or avoid redundant copies. Shared memory is an efficient means of passing data between programs.
在軟件層面,共享內(nèi)存可以使多個(gè)進(jìn)程訪問(wèn)同一塊內(nèi)存空間,是 Linux 下的多進(jìn)程之間通信的一種方法。
共享內(nèi)存
如上圖所示,進(jìn)程A和進(jìn)程B共享同一塊物理內(nèi)存,對(duì)于共享內(nèi)存中的數(shù)據(jù),進(jìn)程A和進(jìn)程B均可進(jìn)行相關(guān)操作,從而達(dá)到兩個(gè)進(jìn)程之間數(shù)據(jù)傳遞的目的。
共享內(nèi)存是進(jìn)程間通信中最簡(jiǎn)單的方式之一。共享內(nèi)存允許兩個(gè)或更多進(jìn)程訪問(wèn)同一塊內(nèi)存,就如同 malloc() 函數(shù)向不同進(jìn)程返回了指向同一個(gè)物理內(nèi)存區(qū)域的指針。當(dāng)一個(gè)進(jìn)程改變了這塊地址中的內(nèi)容的時(shí)候,其它進(jìn)程都會(huì)察覺(jué)到這個(gè)更改。
在Linux中,每個(gè)進(jìn)程都有屬于自己的進(jìn)程控制塊(PCB)和地址空間(Addr Space),并且都有一個(gè)與之對(duì)應(yīng)的頁(yè)表,負(fù)責(zé)將進(jìn)程的虛擬地址與物理地址進(jìn)行映射,通過(guò)內(nèi)存管理單元(MMU)進(jìn)行管理。兩個(gè)不同的虛擬地址通過(guò)頁(yè)表映射到物理空間的同一區(qū)域,它們所指向的這塊區(qū)域即共享內(nèi)存。
共享內(nèi)存
如上圖所示,若A進(jìn)程給內(nèi)存中寫數(shù)據(jù), B進(jìn)程從內(nèi)存中讀取數(shù)據(jù),在此期間一共發(fā)生了兩次復(fù)制:
- A進(jìn)程到共享內(nèi)存
- 共享內(nèi)存到B進(jìn)程
因?yàn)橹苯釉趦?nèi)存上操作,所以共享內(nèi)存的速度非常快。
但需要注意的是,共享內(nèi)存并未提供同步機(jī)制,也就是說(shuō),在第一個(gè)進(jìn)程結(jié)束對(duì)共享內(nèi)存的寫操作之前,并無(wú)自動(dòng)機(jī)制可以阻止第二個(gè)進(jìn)程開(kāi)始對(duì)它進(jìn)行讀取,所以通常需要用其他的機(jī)制來(lái)同步對(duì)共享內(nèi)存的訪問(wèn),例如使用信號(hào)量來(lái)實(shí)現(xiàn)同步與互斥,確保一個(gè)進(jìn)程在寫的時(shí)候不能被讀。
相關(guān)閱讀
內(nèi)存溢出和內(nèi)存泄漏
何為計(jì)算機(jī)的虛擬內(nèi)存
C程序中常見(jiàn)的與內(nèi)存相關(guān)的錯(cuò)誤
迫不得已時(shí)使用動(dòng)態(tài)內(nèi)存分配的注意事項(xiàng)
進(jìn)程的抽象概念:獨(dú)立控制流和私有地址空間
總結(jié)
以上是生活随笔為你收集整理的共享内存 传一个类指针_共享内存介绍:Shared Memory的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: qt之qml开发优缺点_linux配置v
- 下一篇: 填谷式无源pfc电路_有源PFC电路上各