Bu hem C hem de C++ için teorik bir sorudur.Otomatik değişkenlerin tahsis alanını C/C++ cinsinden değiştirmek mümkün müdür?
ben oldukça basit tanımlanmış olan bir 4x4 matris tipi vardır:
typedef float Matrix44[16];
Ayrıca, örneğin, bir parametre olarak bir Matrix44
almak birçok yöntem vardır: Aynı zamanda var
bool matrixIsIdentity(Matrix44 m);
geniş bir bellek alanı yığının üzerine önceden tahsis edilen ve sonra bu önceden getirilen belleğe ilişkin tahsisleri elle yöneten özel bir bellek ayırma şeması. Bu nedenle kendi uygulamalarım ile malloc
/new
'u değiştirdim/aşırı yükledim. Sorun, her iki özel malloc
ve new
, doğası gereği, bir işaretçi değil, bir nesne döndürür.
Normalde, sadece aşağıdakileri: Keşke gibi
// Method 1
1] Matrix44 mat = { ... };
2] bool res = matrixIsIdentity(mat);
Ancak satır 1 değil benim özel hafıza alanında istife
mat
tahsis etti. Alternatif: Burada
// Method 2
1] Matrix44 *mmat = myMalloc(...);
1a] Matrix44 *nmat = new ...
2] bool res = matrixIsIdentity(*mat);
Sorunum çöp için KQUEUE operatörleri ile benim koduna sahip olması nedeniyledir. Şimdi bir seçenek Matrix44*
almak için tüm yöntemleri yeniden yazmak olurdu, ancak, bu teorik olduğu gibi, bir seçenek olmadığını varsayalım.
Bu nedenle benim sorum şu olur: Method 1 Line 1
'da olduğu gibi C ve/veya C++ otomatik değişkeni bildirmenin bir yolu var mı, yoksa alternatif bir ayırma şemasına sahip mi (Method 2 Line 1
'da olduğu gibi)?
Lütfen bunu yanlış anlama, ama umarım bu mümkün değildir. İşaretçi gibi görünmüyorsa, işaretçi gibi davranmamalı. Tabii ki, C++'da işler her zaman çok net değildir, heh. – unwind
Sanırım, her şeyden önce, kullandığınız işletim sistemine bağlı. Bellek düzenini yeniden düzenlemek için linker ile keman yapabileceğini tahmin ediyorum. Ama emin olmaktan çok uzakım ... –
Gerçekten 'Matrix44''ü bir parametre olarak kullanmamalısınız; bu çok pahalı. Bunun yerine bu tür parametreleri “const Matrix44 &” olarak bildirin. Bu, belki de matrisleri ilk sırada yığına yerleştirme arzunuzu azaltabilir mi? –