关于汇编跟C/C++已经java的内存理解
因為看完匯編語言一書后,對C語言的理解更深了一個層次。以及平時用java的架構開發web,對java的內存問題也有一定的了解。因此特地的寫一篇關于內存的博客。僅提供給自己看,以及不是大神而是與我一般水平的人員閱讀。
匯編的內存分配
以8086CPU為例子(我也只學過8086的),可以由自己分配數據段,以及任何一個內存單元都可以作為數據對的存儲。而在內存單元中的數值分別代表的是指令或者是數據。二者必居其一,不可量不可也!
C/C++內存分配
C/C++分配內存空間分為三種,一種是用棧的內存空間,一種是用堆的內存空間,還有一個是靜態存儲區。
三者的區別是在于:
一般情況下,C/C++的在定義靜態的變量和方法的時候會將它們存儲到靜態存儲區中;在定義全局變量以及局部變量的時候將它們存儲到棧內存中;當使用new的時候將它們存儲在堆內存而將這個引用的地址存儲在棧中。
JAVA內存分配
JAVA分配內存空間也是三種,堆棧,堆,靜態存儲區。
三者的區別:
最后垃圾回收器根據引用計數器等一系列回收方式將沒有存在引用的對象銷毀。
方法區
沒錯,這3種語言都是存儲方法的首地址。訪問方法的首地址來執行相應的方法。
主函數
對匯編而言,主函數不一定要為main,而是CS、IP開始執行的位置。C/C++還有JAVA在一般(也就是約定俗成的情況下)主函數的入口就是main。
對于main方法而言,它其實也是一個方法的首地址(入口地址)。
反思想
我們可以通過對C/C++的重寫構造,使之成為一個讓人"看不懂"而功能又是一樣的程序。因為變量就是地址,而方法也是首地址。完全可以通過改變地址去調用任何你想調用的方法。也就是說,如果同時運行兩個程序,你知道其中一個程序中的子程序的首地址,那你完全可以C語音編程調用這個子程序。因為它們都只是內存地址而已。
結尾
以上都是自己的猜想。
總結
以上是生活随笔為你收集整理的关于汇编跟C/C++已经java的内存理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Fastdata极数:2021年中国互联
- 下一篇: 2020中国教育行业生存实录