回答
堆棧和指針是兩個完全獨立的概念。
引用就像一個指針,一種訪問/傳遞變量而不復制它的方法。另一方面,堆棧和堆是變量存在的兩個不同的地方。 決定一個變量是否應該存放在堆棧或堆上是完全獨立於你傳遞它的方式。
- 如果您需要一個局部變量,並將自動耦合到您的函數範圍的生命週期聲明在堆棧上。分配速度很快,但功能範圍結束時該對象不見了。考慮到這一點,您可以通過值或通過指向其他函數的變量來傳遞變量。
- 如果您需要一個在函數作用域中存在的變量,則需要將其設置爲全局(或靜態),或將該變量動態地放在堆上。分配有點慢,但一旦它在那裏,就可以像其他人一樣使用它。你可以通過價值或指針來傳遞它。 (請記住,您需要最終取消動態創建的對象)。
如果堆分配確實是性能瓶頸,則應確保在可能的情況下使用自動變量(在堆棧上)。然後,分析你的分配模式。最後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