Aracılığıyla paylaş


Ayrılan Belleğin Kapsamı

Bir işlemin bellek ayırma işlevlerini (HeapAlloc, VirtualAlloc, GlobalAllocveya LocalAlloc) kullanarak ayırdığı tüm bellek yalnızca işlem tarafından erişilebilir. Ancak, DLL tarafından ayrılan bellek, DLL'yi çağıran işlemin adres alanında ayrılır ve aynı DLL'yi kullanan diğer işlemler için erişilebilir değildir. Paylaşılan bellek oluşturmak için dosya eşlemeyi kullanmanız gerekir.

Adlandırılmış dosya eşlemesi, paylaşılan bellek bloğu oluşturmak için kolay bir yol sağlar. İşlem, dosya eşleme nesnesi oluşturmak için createFileMappingişlevinibir ad belirtebilir. Diğer işlemler, CreateFileMapping için aynı adı belirtebilir veya eşleme nesnesine tanıtıcı almak için OpenFileMappingişlevini.

Her işlem, MapViewOfFile işlevindeki dosya eşleme nesnesinin tanıtıcısını belirterek dosyanın bir görünümünü kendi adres alanına eşler. Tek bir dosya eşleme nesnesi için tüm işlemlerin görünümleri, aynı paylaşılabilir fiziksel depolama sayfalarına eşlenir. Ancak, mapViewOfFileExişlevi görünümü belirtilen adreste eşlemek içinkullanılmadığı sürece, eşlenen görünümlerin sanal adresleri bir işlemden diğerine farklılık gösterebilir. Paylaşılabilir olsa da, eşlenmiş bir dosya görünümü için kullanılan fiziksel depolama sayfaları genel değildir; bunlar, dosyanın bir görünümüne eşlenmeyen işlemler tarafından erişilemez.

Bir dosyanın görünümünü eşleyerek işlenen tüm sayfalar, eşleme nesnesinin görünümüne sahip son işlem UnmapViewOfFile işlevini çağırarak görünümünü sonlandırdığında veya eşlediğinde serbest bırakılır. Şu anda, eşleme nesnesiyle ilişkili belirtilen dosya (varsa) güncelleştirilir. Belirtilen bir dosya, FlushViewOfFile işlevi çağrılarak da güncelleştirilmeye zorlanabilir.

Daha fazla bilgi için bkz. dosya eşleme . DLL'de paylaşılan bellek örneği için bkz. Dynamic-Link Kitaplığında Paylaşılan Belleği Kullanma.

Birden çok işlemin paylaşılan belleğe yazma erişimi varsa, belleğe erişimi eşitlemeniz gerekir. Daha fazla bilgi için bkz. eşitleme .