gpt4 book ai didi

.net - 在(托管)堆栈上的托管 C++/cli 中创建的 std::vector 可能会更改内存位置吗?

转载 作者:行者123 更新时间:2023-12-02 00:37:29 27 4
gpt4 key购买 nike

如果在 C++/cli 中我写

ref class test {
void method() {<
std::vector<float> my_stack_vector;
native_function_call( & my_stack_vector );
}
};

my_stack_vector 创建后的位置可以改变吗?我知道,如果它存在于底层的 native 堆栈中,那么它就不会改变,但是随着 .Net 创建的额外抽象层,我不知道它是否会在内存中移动。

更重要的是,我如何为自己验证这一点,例如在运行时或其他地方编译成 native 代码后,我会使用 ILDASM 或在 native 反汇编中寻找什么,以便将来能够自己回答此类问题?

最佳答案

不,您可以使用此代码。垃圾收集器只移动在 GC 堆上分配的托管(ref 类)对象。它不会混淆堆栈或 JIT 编译代码。

你不必担心会引发这样的错误,编译器总是会警告你。例如,尝试使向量成为该类的成员。现在这将是一个问题,GC 确实移动了一个“test”类型的对象。

关于.net - 在(托管)堆栈上的托管 C++/cli 中创建的 std::vector 可能会更改内存位置吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3988492/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com