我最近偶然看到了用,alloca()函數。谷歌搜索告訴我,它用於分配堆棧空間。我無法抓住它的應用程序?另外,使用它有什麼缺陷嗎?
2
A
回答
5
函數alloca
從來不是任何C標準的一部分。它典型地是由供應商提供的作爲擴展,以實現類似的可變長度陣列(「VLA」收費)C99:
void foo(int n)
{
char arr99[n]; // C99-style VLA
char * p89 = alloca(n); /* C89 work-around using "alloca" */
// Usage:
for (int i = 0; i != n; ++i)
{
arr99[i] = p89[i] = '0' + i;
}
} // memory is freed automatically here
在兩種情況下,存儲器被自動管理,並在結束時釋放功能。
alloca
的使用是精神上的負擔,因爲它不太適合C對象模型。例如,即使您將內存分配到嵌套範圍內,它也會一直保持活動狀態,直到封閉的函數的結束,而不僅僅是塊。 VLA有更好的語義,可以用動態的sizeof
來查詢,而alloca
分配的內存沒有等價的機制。
0
當你想做一個動態分配的分配(例如使用一個在運行時間變化的大小)時很方便,但仍然可以肯定,一旦調用alloca()
的代碼超出範圍,它就全部清除。與所有自動(「堆棧」)分配一樣,如果意外地將指針存儲的時間超過其有效時間,將會傷到腳。
相關問題
- 1. gcc處理alloca有什麼用?
- 2. 在llvm代碼中出現%「alloca point」行的目的是什麼?
- 3. Cuda equivlent的alloca
- 4. 模仿`ALLOCA()`用C
- 5. 爲什麼鐺的`-O3` ALLOCA 2倍的速度比G ++
- 6. alloca是完全可替換的嗎?
- 7. alloca是C++標準的一部分嗎?
- 8. 爲什麼這個CMake腳本找到「alloca」並仍然失敗?
- 9. 什麼是Django「應用程序」應該是什麼意思?
- 10. 什麼是Tomcat ROOT應用程序,它的優點是什麼?
- 11. Mandrill應用程序 - 它是什麼,它的API key是什麼
- 12. Django:什麼是`sys.path`應該是什麼?
- 13. LLVM IR alloca指令
- 14. 返回alloca指針
- 15. 無效的轉換與ALLOCA
- 16. C中的alloca函數
- 17. 應該是什麼
- 18. 什麼是單幀應用程序和什麼是FrameView?
- 19. 「:: date」在redshift中的應用是什麼?
- 20. HORN的真實應用是什麼?
- 21. fatwire的應用服務器是什麼?
- 22. 什麼是Market應用的APK名爲?
- 23. 什麼是Django中的「應用程序」?
- 24. 什麼是argsort)的實際應用(
- 25. 什麼是Facebook應用FBML'profile.setFBML'的參數?
- 26. Scala中的應用函數是什麼?
- 27. 雲應用程序是什麼樣的?
- 28. 什麼是我的錯?Android應用
- 29. 什麼是salesforce中的應用程序
- 30. 關於使用和濫用alloca