分配給變量(例如int i = 5)的任何值以十六進制形式存儲在內存中的某個地址處。 那麼與存儲相關的變量名稱(i)會在內存中轉換爲ASCII碼嗎?標識如何存儲在內存中?
回答
我不能對Java說話的內存只是一個普通的分配。
在C中,可變標識符(通常)不保留在所生成的機器代碼。相反,你會(通常)看到通過寄存器的偏移量引用的對象。
例如,在我的系統,給定的源極線
i = 5;
我的編譯器生成的機器代碼
movl $5, -4(%rbp)
%rbp
是基指針寄存器 - 它存儲的基地址一個堆棧幀,它包含函數參數(如果有的話),局部變量(如果有的話)的空間和下一個指令的地址函數調用。在我的系統中,局部變量存儲在基指針寄存器(負偏移)中的值「下方」,而函數參數存儲在「上」(正偏移)處。與函數參數或變量關聯的標識符根本不被保留。
是的,Java存儲的東西。
答:
運行時知道輸入的一切是因爲幾乎所有的東西都是一個對象,每個對象有一個名爲「的getClass()」方法,這將返回對象的類型。
,當一個對象被傳遞到Java中的方法的裝置,所述參數類型是已知的,並且還對象的類型是太已知的。這意味着要確定它是否是一種有效的類型是很容易的。
INT在Java不是一個對象,但該類型的信息在兩個仍然存在的方法int參數,並很容易檢查它們是否匹配。
一個4字節串與32位整數的例子是在C語言的有效足夠點,但不是在Java中,其中字符串是由被簡單地給定長度的字符數組抽象出來。字符串是在Java對象,而不是像C.
但是Java不存儲(本地非成員)變量本身的名稱。 – Cornstalks
@Cornstalks它的確如此,但並不符合您的期望。類文件*可以包含一個LocalVariableTable(但不是運行所必需的,可以省略),它描述了哪個索引(內存地址的排序)具有哪個變量名稱和類型(因爲索引可以在一種方法中用於不同的局部變量)https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.7.13 –
標識符名稱不保留在編譯後的彙編文件。它們在編譯期間保持在稱爲Symbol Table的數據結構中,該數據結構將每個標識符與關於其聲明和存儲器地址分配的信息相關聯。
在編譯過程中,爲標識符分配一個內存地址,然後使用分配給進程的內存堆棧的基址指針的偏移量來訪問內存地址。
- 1. 如何在內存中的存儲庫
- 2. 矩陣如何存儲在內存中?
- 3. 結構如何存儲在內存中?
- 4. 整數如何存儲在內存中?
- 5. 數組如何存儲在內存中?
- 6. 如何使用視頻內存作爲標準內存存儲?
- 7. 如何在數據庫中存儲開放標識號?
- 8. 如何使用vb.net在會話中存儲用戶標識
- 9. 如何在會話mvc c#中存儲用戶標識?
- 10. 如何在Db中高效地存儲AWS機器標識
- 11. 如何將POJO的內容存儲在偏好存儲中?
- 12. Android,如何將圖像存儲在內部存儲器中?
- 13. fortran:在變量存儲在內存中後,識別變量*的內在類型
- 14. 在類中存儲內存內容 - C++
- 15. NoSQL存儲用於在內存中存儲圖像的內容?
- 16. 在頁面加載時將圖像標識存儲在本地存儲中 - AngularJS
- 17. 如何存儲在存儲過程中
- 18. 如何在MB中計算可用內部存儲器內存?
- 19. 變量如何在遞歸中存儲在內存中?
- 20. 如何在Ruby on Rails中將數據存儲在內存中
- 21. 如何在FlashBuilder中存儲GPS座標?
- 22. 如何在iOS中存儲GPS座標?
- 23. 如何將圖片保存在內存中(不在內部存儲)
- 24. 如何在id已被使用時存儲div的標識?
- 25. Arduino中的內存存儲
- 26. 是存儲在JVM內存
- 27. 如何在.NET中的內存中存儲位圖?
- 28. 空字符串(「」)如何在Java中的內存中存儲?
- 29. IEnumerable如何在c#中的內存中存儲?
- 30. 如何在Phoenix中存儲內存中的變量?
不確定您是在詢問Java還是C,但在這兩種情況下答案都是_no_。 –
「* ...採用十六進制形式... *」編號值使用位以二進制形式存儲。所有數據都使用位進行存儲,這只是二進制的物理實現。十六進制對程序員來說只是一個方便的數字系統。 – Cornstalks
[當你說'int i = 5;'](https://godbolt.org/g/VxKtUu)時,你的電腦實際上正在做這件事。它分配一小塊內存併爲其分配值5。從人類可讀代碼(本例中爲C)轉換爲機器可讀代碼(本例中爲x86_64)時,該變量的名稱完全丟失。有些語言支持[反思](https://en.wikipedia.org/wiki/Reflection_(computer_programming)),所以(取決於語言)可能會在運行時提供有關特定變量的某些信息。但C不支持反射。 – Cornstalks