比方說,例如,我使用一些彙編代碼將大量數據推送到堆棧上。我的問題是,是否可以通過將棧指針的地址傳遞給C++程序(或其他方式)來操作這些數據,如C++?如果是這樣,C++將如何處理這些數據?意思是,我將如何確定C++中的數據類型?語言之間的堆棧數據
1
A
回答
4
是的,你可以做到這一點,當然你必須正確使用調用約定,以便數據清楚地表明C++代碼使用堆棧的任何區域。堆棧內存只是內存,就接收這個指針的代碼而言,將一些值推入堆棧或移動堆棧指針(即在堆棧上創建一個數組/結構)並寫入值進入你創建的空間,或者只是動態地分配一些內存並將值放入。你的彙編程序推送指令將值放在某個特定的佈局中。
您無法確定數據類型。例如,在x86上,兩個並排的32位int
值與完全相同,爲64位long long
值。這就是爲什麼調用約定會指定堆棧中參數的佈局,並要求調用者和被調用者都知道(並同意)參數的順序和類型。
當然,您可以提供額外的信息,它允許被調用者計算出數據類型。例如,printf
的第一個參數是指向格式字符串的指針,通過解析格式字符串,被調用者知道這個特定調用的剩餘參數的類型,然後可以使用可變參數宏讀取它們。
2
我相信它都需要在同一個過程中運行。但是,難道你不能只是在C++中鍵入一個結構來確定數據類型,並且將一個頭添加到你放入堆棧的信息中,以指示數據的佈局方式。
+0
是的,而且如果我要通過堆棧傳遞這些數據,很可能會有一種正式格式需要推送,並且C++程序會以此格式讀取它。 – 2010-11-01 17:48:52
相關問題
- 1. 堆棧語言的識別
- 2. 彙編語言 - 堆棧機
- 3. 正式語言的堆棧翻譯器
- 4. 哪些JVM語言是無堆棧的?
- 5. 編譯基於堆棧的語言CIL
- 6. 數組和堆棧之間的區別?
- 7. 基於堆棧語言的高級語言
- 8. 堆棧和C語言編程
- 9. 計算機堆棧和Assemly語言
- 10. 如何以LISP語言實現堆棧
- 11. 棧和堆在編程語言
- 12. 使堆棧視圖之間的間隔
- 13. 描述堆棧和列表堆棧之間的區別?
- 14. 堆棧間隔的數據結構
- 15. 在查看堆棧中的頁面之間發送數據
- 16. 除了堆棧之外,還有哪些編程語言在繼續恢復堆?
- 17. 3堆整數之間的堆棧排序
- 18. 通過堆棧的彙編語言putch函數
- 19. 堆棧之間的Java移動號碼
- 20. 數據何時在SSE寄存器和堆棧之間移動?
- 21. 進程虛擬內存 - 堆棧和堆之間的空間
- 22. 堆棧及緩衝區溢出數組c語言
- 23. 以彙編語言將數組複製到堆棧幀
- 24. 序言集,堆棧溢出
- 25. 線程之間同步堆棧
- 26. 在CloudFormation堆棧之間引用資源
- 27. 從堆棧中間展開堆棧
- 28. 字符堆棧,字符串堆棧,整數堆棧,整數數組堆棧等
- 29. 堆中的對象與堆棧內存之間的混淆
- 30. 在Python中的數據類型之間的內存語言
我會說不要使用堆棧來進行「通信」。使用通常的參數傳遞/內存。 – 2010-11-01 17:27:31