Eph*_*era 5 c c++ stack memory-management local-variables
这是C和C++的理论问题.
我有一个4x4矩阵类型,其定义非常简单:
typedef float Matrix44[16];
Run Code Online (Sandbox Code Playgroud)
我也有很多方法将Matrix44参数作为参数,例如:
bool matrixIsIdentity(Matrix44 m);
Run Code Online (Sandbox Code Playgroud)
我还有一个自定义内存分配方案,在堆上预先分配大面积内存,然后我手动管理该预取内存的分配.因此我已经用我自己的实现替换/重载malloc/ new.问题是,自定义malloc和new本质上都返回一个指针,而不是一个对象.
通常,我只会做以下事情:
// Method 1
1] Matrix44 mat = { ... };
2] bool res = matrixIsIdentity(mat);
Run Code Online (Sandbox Code Playgroud)
但是,第1行分配mat在堆栈上,而不是我想要的自定义内存区域.另一种选择是:
// Method 2
1] Matrix44 *mmat = myMalloc(...);
1a] Matrix44 *nmat = new ...
2] bool res = matrixIsIdentity(*mat);
Run Code Online (Sandbox Code Playgroud)
这里的问题是我必须使用解引用运算符来丢弃我的代码.现在一个选择是重写所有要采用的方法Matrix44*,但是,由于这是理论上的,我想假设这不是一个选项.
因此我的问题变成:有没有办法在C和/或C++中声明一个自动变量Method 1 Line 1,但它是否遵循备用分配方案(如Method 2 Line 1)?
(我很欣赏这可能涉及与编译器相关的讨论,但我还没有为此添加标签)
这是不可能的,自动变量是基于堆栈的。但你可以在构造函数中做任何你想做的事情。因此,您的 Matrix44 将只是一个薄薄的包装,例如 Matrix44Impl,它将指向您的“自定义”内存。