是否可以在C/C++中更改自动变量的分配区域?

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.问题是,自定义mallocnew本质上都返回一个指针,而不是一个对象.

通常,我只会做以下事情:

   // 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)?

(我很欣赏这可能涉及与编译器相关的讨论,但我还没有为此添加标签)

ixS*_*Sci 4

这是不可能的,自动变量是基于堆栈的。但你可以在构造函数中做任何你想做的事情。因此,您的 Matrix44 将只是一个薄薄的包装,例如 Matrix44Impl,它将指向您的“自定义”内存。