马士兵JVM 精讲笔记(一)
本文和后文中講的都是32位機,也就是i386的系統
計算機語言(機器語言)可以通過0和1生成機器指令,將指令輸入到cpu 來執行,通過機器指令計算機可以實現各種各樣的功能,而機器語言又分為操作碼和操作數,假如:
int a = 1;生成的機器碼為(下面是隨便輸的):
101010(操作碼) 10101010101011011111(操作數)其中就包含了操作碼和操作數,在內存當中每一個基礎執行單元為8位,1byte(字節)等于8bit(位),而int a 是四字節,所以在內存當中開辟空間的時候會在內存中開辟4byte的空間,而在開辟內存的過程中,必須指定內存的地址,此時就引出的高地址和低地址的概念。
高地址和低地址
可以簡單的認為,可以把主存看成一本空白的作業本,內存地址就相當于主存的頁碼,你現在要在筆記本上記錄一些內容,他的頁碼排序是
第一頁 : 0x0000001 第二頁 : 0x0000002 ... 最后一頁: 0x0000092
1 如果你選擇`從前向后記錄`(用完第一頁,用第二頁,類推)這就是先使用低地址,后使用高地址.
業內有這樣表述:動態分配內存時堆空間向高地址增長,說的就是這種情況.
這個向高地址增長就是先使用低地址,后使用高地址的意思.
2 如果你選擇`從后往前記錄`(先用筆記本的最后一頁,用完后使用倒數第二頁,類推) 這就是先使用高地址,后使用低地址
業內表述:`0xbfac 5000-0xbfad a000`是棧空間,其中高地址的部分保存著進程的環境變量和命令行參數,低地址的部分保存函數棧幀,**棧空間是向低地址增長的**.
這個向低地址增長就是先使用高地址,后使用低地址的意思.
棧底(棧基址)和棧頂
通過上面的高地址和低地址我們明白,在內存中是以類似于數組的方式存儲數據,而0x0000092之類的數值代表了數據在內存中的位置,也就是我們的內存地址(類似于下標),我們如果要找到指定的數據,就必須在CPU當中存儲棧底和棧頂的地址,這時就牽扯到了CPU的寄存器
SP寄存器(stack pointer) 和BP寄存器(base pointer)
SP寄存器存儲了棧頂的地址,而BP寄存器則存儲了棧底的地址,初始狀態下內存中不存在數據,棧頂和棧底指向了同一個位置(就像數組第一個下標是0,最后一個下標也是零,第一個下標相當于棧頂,最后一個下標相當于棧底),當我們需要在內存中開辟一個空間的時候,通過sp寄存器的位置減去要開辟的內存空間,如果寫成匯編代碼則可以如下表示:
例如:上面的int a 為四字節,所以要在內存中開辟四字節的空間,所以SP 寄存器的減去4個字節,則相當于在內存中開辟了4字節的內存空間
sub 4,spsub在英文中代表了減,我們就可以看出在內存中減去了四個字節,而在內存中存放數據的時候是存在指定的順序的,這里就引出了一個關鍵知識點:字節序。
字節序
字節序分為大端序和小端序,我們的內存也存在高低之分,越往右是低,越往左是高,低位置叫做小端序,高位置叫做大端序,而大端序和小端序則是代表了內存的兩種排序規則。
大端序(英:big-endian)或稱大尾序。,數據以8bit為單位:
地址增長方向??→
| 0x0A | 0x0B | 0x0C | 0x0D |
小端序(英:little-endian)或稱小尾序。數據以8bit為單位:
| 0x0D | 0x0C | 0x0B | 0x0A |
Inter 64 位和AI 32 位的處理器使用的都是小端序
Inter 寄存器的變遷
在1978年Inter 處理器為16位,SP 寄存器和BP寄存器的名稱并沒有變化,在之后處理變為了32位后,SP寄存器和BP寄存器則被稱為ESP 寄存器和EBP寄存器,也就是擴展的SP和BP寄存器,而64位將E改為了R叫做RBP和RSP寄存器。
高八位和低八位
以EBP寄存器為例:一個EBP由兩個BP組成,而我們的數據越往右越低,所以EBP寄存器中往左的16位為高16位,往右的16位為低16為。AX 寄存器為通用寄存器,為16位寄存器,變成32位,被稱為EAX,變成64位被稱為RAX,一個16位可以表示成兩個八位,往左的8位為高八位,往右的8位為高八位,將AX中的X替換為H 和 L,AH代表高八位,AL代表低八位,X 在這里代表了未知數。
再來看匯編
因為本文研究的是32位機,所以寄存器的名稱為ESP和EBP,那此時int a = 1;我們在內存中開辟一塊空間,使用匯編語言可以這樣寫:
sub 4,esp mov 1,-4(ebp)mov 1,-4(ebp)表示將數值1 移動到-4的ebp位置。
總結
以上是生活随笔為你收集整理的马士兵JVM 精讲笔记(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Minecraft 1.16 简易高效的
- 下一篇: 可汗学院统计学1-16课笔记