2012-05-18 19 views
7

Linux'ta bir işlemi (örneğin execve ile) başlatmak ve yığın alanı olarak belirli bir bellek bölgesini kullanmak mümkün mü?Bellek bölgesini yığın alanı olarak mı kullanıyorsunuz?

Geçmiş:

Bir C++ programı ve bana "hızlı bellek" veren bir hızlı ayırıcı var. Yığını kullanan ve bunları hızlı bellekte yaratan nesneler için kullanabilirim. İnce. Ama aynı zamanda yığın üzerinde çok fazla değişkenim var. Onları hızlı hafızayı nasıl kullanabilirim?

Fikir: Hızlı belleği ayıran ve daha sonra gerçek ana programı başlatan, hızlı belleğe bir işaretçiyi geçiren ve program onu ​​yığın olarak kullanan bir "program sarıcı" uygular. Mümkün mü?

[Güncelleme]

pthread kurulum iş gibi görünüyor. Pthreads ile

+3

Gerçekten de * hızlı * ayırıcınızın yığın ayırma işleminden daha hızlı olabileceğini düşünmüyorum. Genel olarak, yığın ayırma, işlev başına birkaç yönergeyi alır. Yoksa, hafızanın sistemdeki başka herhangi bir yerden daha hızlı * olduğunu mu kastediyorsunuz? –

+1

@ DavidRodríguez-dribeas ikincisi! Hızlı olan bellek, allocator değil – ritter

+1

Hangi platformda iki farklı RAM türü kullanıyorsunuz? –

cevap

9

, programınızın mantığı için ikincil iş parçacığı kullanabilir ve ayarlayabilirsiniz pthread_attr_setstack() kullanarak yığın adresi:

NAME 
     pthread_attr_setstack, pthread_attr_getstack - set/get stack 
     attributes in thread attributes object 

SYNOPSIS 
     #include <pthread.h> 

     int pthread_attr_setstack(pthread_attr_t *attr, 
           void *stackaddr, size_t stacksize); 

DESCRIPTION 
     The pthread_attr_setstack() function sets the stack address and 
     stack size attributes of the thread attributes object referred 
     to by attr to the values specified in stackaddr and stacksize, 
     respectively. These attributes specify the location and size 
     of the stack that should be used by a thread that is created 
     using the thread attributes object attr. 

     stackaddr should point to the lowest addressable byte of a buf‐ 
     fer of stacksize bytes that was allocated by the caller. The 
     pages of the allocated buffer should be both readable and 
     writable. 

Ne uymayan herhangi almak için bekliyorsanız nasıl Böyle bir şey yapmadan performans iyileştirmeleri ("hızlı" belleğinizin amacının daha iyi bir performans olduğunu düşünüyorum).

+2

Awesome! Benim durumumda işe yarayıp yaramadığından emin değilsiniz. Sorunuz: Hızlı ayırıcı, "cudaHostAlloc", GPU'lara hızlandırılmış bellek aktarımı için kullanılan sayfa kilitli belleği döndürür. Böylece, eğer bu işe yararsa, yığın değişkenlerinin kopyalarını hızlandırabilirim !! – ritter

+1

@Frank: İlginç. Nasıl gittiğini bize bildirin. – NPE

İlgili konular