Jest to teoretyczne pytanie zarówno dla C jak i C++.Czy można zmienić obszar alokacji zmiennych automatycznych w C/C++?
mam typ matrycy 4x4, który jest określony po prostu jako:
typedef float Matrix44[16];
również wiele metod, które podejmują Matrix44
jako parametr, na przykład:
bool matrixIsIdentity(Matrix44 m);
również mieć niestandardowy schemat alokacji pamięci w miejscu, w którym duży obszar pamięci jest wstępnie przydzielony do sterty, a następnie zarządzam przydzieleniami w tej wstępnie zapisanej pamięci ręcznie. Jako takie zastąpiłem/przeciąłem malloc
/new
z moimi własnymi implementacjami. Problem polega na tym, że zarówno niestandardowe malloc
i new
, z natury, zwracają wskaźnik, a nie obiekt.
Normalnie, chciałbym po prostu wykonaj następujące czynności:
// Method 1
1] Matrix44 mat = { ... };
2] bool res = matrixIsIdentity(mat);
Jednak linia 1 przeznaczono mat
na stosie, nie w moim niestandardowego obszaru pamięci jako Życzyłbym. Alternatywą jest:
// Method 2
1] Matrix44 *mmat = myMalloc(...);
1a] Matrix44 *nmat = new ...
2] bool res = matrixIsIdentity(*mat);
Problem polega na tym, że musiałbym zaśmiecić mój kod operatorami dereferencyjnymi. Teraz jedną z opcji byłoby przepisanie wszystkich metod, aby zamiast tego przyjąć Matrix44*
, ale, jak to jest teoretyczne, chciałbym założyć, że nie jest to opcja.
Dlatego moje pytanie brzmi: Czy istnieje sposób deklarowania automatycznej zmiennej w C i/lub C++, jak w Method 1 Line 1
, ale to śledzić alternatywny system przydziału (jak w Method 2 Line 1
)?
(docenić, że może to obejmować dyskusja dotyczy kompilatora, ale nie dodaje się znaczniki w tym celu)
Proszę nie brać tego w niewłaściwy sposób, ale mam nadzieję, że to niemożliwe. Jeśli nie wygląda jak wskaźnik, nie powinien zachowywać się jak wskaźnik. Oczywiście w C++ rzeczy nie zawsze są tak jednoznaczne, heh. – unwind
Myślę, że to przede wszystkim zależy od systemu operacyjnego, którego używasz. Sądzę, że można sobie poradzić z linkerem, aby zmienić układ pamięci. Ale nie jestem pewny ... –
Naprawdę nie powinieneś brać "Matrix44" jako parametru; to jest bardzo drogie. Zadeklaruj takie parametry zamiast "const Matrix44". Czy to może zmniejszyć Twoją chęć przydzielania macierzy na stercie? –