回答
堆栈和指针是两个完全独立的概念。
引用就像一个指针,一种访问/传递变量而不复制它的方法。另一方面,堆栈和堆是变量存在的两个不同的地方。 决定一个变量是否应该存放在堆栈或堆上是完全独立于你传递它的方式。
- 如果您需要一个局部变量,并将自动耦合到您的函数范围的生命周期声明在堆栈上。分配速度很快,但功能范围结束时该对象不见了。考虑到这一点,您可以通过值或通过指向其他函数的变量来传递变量。
- 如果您需要一个在函数作用域中存在的变量,则需要将其设置为全局(或静态),或将该变量动态地放在堆上。分配有点慢,但一旦它在那里,就可以像其他人一样使用它。你可以通过价值或指针来传递它。 (请记住,您需要最终取消动态创建的对象)。
如果堆分配确实是性能瓶颈,则应确保在可能的情况下使用自动变量(在堆栈上)。然后,分析你的分配模式。最后optimize your allocation strategy。
C#使用引用很多,然后我用指针,没有,我不能创建GC。 – 2012-07-17 09:51:24
引用只是一个语法上糖衣的指针 - 一个指针可以做得很好。
有一种方法可以用堆栈替换堆并在我使用该变量\指针时跳过间接方向? – 2012-07-17 09:22:08
@SuperFile,No. [注意:指针指向的内容可以在堆栈或堆上。同上参考。](http://stackoverflow.com/a/57492/1025391) – moooeeeep 2012-07-17 09:33:25
@moooeeeep我想要比指针更快的东西比如堆栈。 (指针对面)有这样的事情吗?一些不需要间接的东西。 – 2012-07-17 09:34:48
- 1. C++堆栈内存仍然有效吗?
- 2. 堆栈溢出与std :: make_unique但没有与原始指针
- 3. 堆栈帧和堆栈指针
- 4. ANDing堆栈指针
- 5. 使用dwarf2获取堆栈指针的堆栈指针值
- 6. C++中的指针和堆栈
- 7. 找出指针是指向堆栈,堆或程序文本吗?
- 8. 堆栈指针VS应用
- 9. 汇编堆栈指针AVR
- 10. 堆栈指针和分割
- 11. 初始化堆栈指针
- 12. 基指针和堆栈指针
- 13. C++,堆栈和结构指针
- 14. 堆栈存储结构指针c
- 15. 有没有办法在LLVM中维护多个堆栈/指令指针?
- 16. 返回指令堆栈中的指针
- 17. 在x86上没有帧指针的堆栈展开
- 18. JXErrorPane没有堆栈跟踪
- 19. NPE没有堆栈跟踪
- 20. 堆栈指针移回,但值没有加载到注册文件?
- 21. 如何判断指针是指向堆栈还是指向堆?
- 22. WebAssembly堆栈/堆栈指针初始化和内存布局
- 23. 堆和C++中的指针
- 24. 有没有办法在AWS cloudformation中配置嵌套堆栈的“堆栈名称”?
- 25. 如何在没有堆栈指针的情况下找到堆栈的当前位置?
- 26. C++堆对象有堆栈或堆成员?
- 27. C++堆栈/堆栈。为什么只有一个新操作员?
- 28. MASM中没有堆栈段警告
- 29. 堆栈TOP指针始终为空
- 30. 堆栈指针寄存器值
直观上,它是堆中比堆中慢的_allocation_,而不是实际使用的变量。另见[这个答案](http://stackoverflow.com/a/79936/1025391)。如果这确实是您的问题,您可能需要优化分配策略。 – moooeeeep 2012-07-17 09:36:00
我知道,我的反编译器优化了分配(约x11.5更快),并且当我使用大量引用(在解压缩后转换为指针)时,我看到性能下降。 – 2012-07-17 09:46:06
那么你的反编译器可能有另一个问题,这显然不是这个问题的主题? – moooeeeep 2012-07-17 09:55:16