2012-05-18 15 views
7

W systemie Linux jest możliwe uruchomienie procesu (np. Z execve) i sprawienie, by korzystał z określonego obszaru pamięci jako miejsca stosu?Użyj obszaru pamięci jako miejsca stosu?

Tło:

Mam program C++ i szybki przydzielania że daje mi "szybkiej pamięci". Mogę go użyć do obiektów, które wykorzystują stertę i tworzą je w szybkiej pamięci. W porządku. Ale mam też wiele zmiennych na temat życia na stosie. Jak mogę je również wykorzystać do szybkiej pamięci?

Idea: Wdrożenie programu „otoki”, który przydziela szybkiej pamięci, a następnie rozpoczyna rzeczywisty programu głównego, przekazując wskaźnik do szybkiej pamięci i program używa go jako stos. Czy to jest możliwe?

[Aktualizacja] Konfiguracja

pthread wydaje się działać.

+3

Nie sądzę, że twój * szybki * alokator może być szybszy niż przydział sterty. Ogólnie rzecz biorąc, przydzielanie sterty wymaga kilku instrukcji na funkcję. Czy masz na myśli, że pamięć jest * szybsza * niż pamięć nigdzie indziej w systemie? –

+1

@ DavidRodríguez-dribeas the last! Jego pamięć jest szybka, a nie podzielnik. – ritter

+1

Jakiej platformy używasz, gdy istnieją dwa różne rodzaje pamięci RAM? –

Odpowiedz

9

Z pthreads, można użyć wątku wtórnego dla logiki programu i ustawić jego adres stos używając pthread_attr_setstack():

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. 

Co ja nie po to, jak jesteś oczekując nic ulepszenia wydajności z robienia czegoś takiego (zakładam, że celem twojej "szybkiej" pamięci jest lepsza wydajność).

+2

Awesome! Nie jestem pewien, czy to działa w moim przypadku, spróbuję. Twoje pytanie: Szybkim przydziałem jest 'cudaHostAlloc' zwraca stronę zablokowaną pamięć, która jest używana do przyspieszonych transferów pamięci do GPU. Tak więc, jeśli to działa, mogę przyspieszyć kopie zmiennych stosu !! – ritter

+1

@Frank: Interesujące. Daj nam znać, jak to działa. – NPE

Powiązane problemy