0

如果 x 类通过 y.create(new z) 调用 y,z obj 是否会像 y 一样在 x 的堆栈中创建?这是假设我们是按值传递,而不是 ref 或 ptrs

4

2 回答 2

1

有几件事:

堆栈/堆位于进程(应用程序)级别,而不是对象级别。整个应用程序共享一个堆栈(至少在您的问题的上下文中),无论它使用多少对象。

除非您示例中的“z”是值类型(如结构),否则它不会完全驻留在堆栈中。如果“z”是一个类,那么它“生活”在堆上,只有在堆栈上对它的引用。

您真的应该阅读 Jon Skeet 的简短解释 - http://www.yoda.arachsys.com/csharp/memory.html - 特别是底部的“一个工作示例”。

于 2013-03-18T19:20:36.630 回答
0

对象 z 在应用程序分配的内存中创建。使用 new 创建对象时,每个函数都没有自己的内存区域。

我建议您阅读页面上的内容,我当然会不时发现它很有用(即当我把事情搞混时)

于 2013-03-18T18:58:16.527 回答