如果在C ++ / cli中我写
ref class test {
void method() {<
std::vector<float> my_stack_vector;
native_function_call( & my_stack_vector );
}
};
my_stack_vector的位置在创建后是否会发生变化?我知道,如果它存在于底层的本机堆栈中,那么它就不会改变,但是通过额外的抽象层.Net创建我不知道它是否会受到内存的影响。
更重要的是,我如何为自己验证,例如在运行时或其他地方将ILDASM编译成本机代码以便能够在将来自己回答这些问题后,我会在使用ILDASM或原生反汇编时寻找什么?
答案 0 :(得分:3)
不,你对这段代码没问题。垃圾收集器仅移动在GC堆上分配的托管(ref类)对象。它不会弄乱堆栈或JIT编译代码。
你不必担心会引发这样的错误,编译器会一直警告你。例如,尝试将向量作为类的成员。现在这将是一个问题,GC 移动“test”类型的对象。