比方說,例如,我使用一些彙編代碼將大量數據推送到堆棧上。我的問題是,是否可以通過將棧指針的地址傳遞給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. 正式語言的堆棧翻譯器
- 5. 編譯基於堆棧的語言CIL
- 6. 如何以LISP語言實現堆棧
- 7. 在查看堆棧中的頁面之間發送數據
- 8. 除了堆棧之外,還有哪些編程語言在繼續恢復堆?
- 9. 堆棧之間的Java移動號碼
- 10. 通過堆棧的彙編語言putch函數
- 11. 進程虛擬內存 - 堆棧和堆之間的空間
- 12. 線程之間同步堆棧
- 13. 序言集,堆棧溢出
- 14. 字符堆棧,字符串堆棧,整數堆棧,整數數組堆棧等
- 15. 堆中的對象與堆棧內存之間的混淆
- 16. .NET EXE和DLL之間的堆棧/堆區別
- 17. std :: vector堆棧幀之間的C++參數的值變化
- 18. 在不同的語言環境中的Java堆棧跟蹤
- 19. 用各種語言編寫的程序之間交換數據
- 20. 數據結構:堆棧
- 21. 析構函數調用(堆棧)變量之間的賦值?
- 22. 性能和調用堆棧層數之間的關係?
- 23. 本地語言中的堆棧溢出行爲
- 24. 自定義JVM語言:創建可用的堆棧跟蹤?
- 25. 堆VS數據段VS堆棧分配
- 26. Django的多語言和模板端語言之間的切換
- 27. 堆棧和堆之間有什麼區別?
- 28. django-多語言和模板端語言之間的切換
- 29. 在Bootstrap 4中添加垂直堆棧列之間的間距
- 30. 如何控制ggplot2中堆棧欄之間的空間?
我會說不要使用堆棧來進行「通信」。使用通常的參數傳遞/內存。 – 2010-11-01 17:27:31