2010-05-21 17 views
5

Windows'da, çok zorlu uygulamalar için, bir programcı, bellek hızlandırmayı daha iyi yönetmek ve daha iyi yönetmek için HeapCreate, HeapAlloc kullanabilir (özel ayırıcılar). Linux C++ programında eşdeğer nedir?HeapCreate, Linux'ta HeapAlloc, Linux için özel ayırıcı

+0

HeapCreate() öğesini kullanarak Windows Kaynak kodunun bir karşılaştırmasını sağlayabilir misiniz? HeapAlloc(). Heapfree(). ve mmap() kullanarak kaynak kodu. aynı şeyi yapmak için fonksiyonlar? – PatrickM

cevap

3

Kendi özel ayırıcınızı kullanmak istiyorsanız, işleminize bir miktar bellek eşlemek için mmap() kullanın, sonra istediğiniz gibi bu belleği kullanabilirsiniz. Bir dosya tanıtıcısını /dev/zero'a açın ve sonra 'fildes' parametresi olarak mmap()'a kullanın. Geçecek parametrelerin tüm ayrıntıları için bkz. man mmap. Bu bakımdan mmap(), HeapCreate() ile aynı rolü oynar.

+2

'/ dev/zero' açmanıza gerek yoktur - sadece 'MAP_ANONYMOUS' işaretini kullanabilir ve -1 değerini fd' argümanı olarak geçirebilirsiniz. – caf

+0

Doğru ve çoğu zaman daha hızlıdır, ancak MAP_ANONYMOUS daha az taşınabilir (örneğin, SUSv2'ye dahil değildir). Ama haklısın, bu durumda neredeyse kesinlikle yapardı :-) – psmears

+0

SUSv2? Kim bir turşu verir :) –