日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

关于汇编跟C/C++已经java的内存理解

發布時間:2025/3/15 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于汇编跟C/C++已经java的内存理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

因為看完匯編語言一書后,對C語言的理解更深了一個層次。以及平時用java的架構開發web,對java的內存問題也有一定的了解。因此特地的寫一篇關于內存的博客。僅提供給自己看,以及不是大神而是與我一般水平的人員閱讀。


匯編的內存分配

以8086CPU為例子(我也只學過8086的),可以由自己分配數據段,以及任何一個內存單元都可以作為數據對的存儲。而在內存單元中的數值分別代表的是指令或者是數據。二者必居其一,不可量不可也!


C/C++內存分配

C/C++分配內存空間分為三種,一種是用棧的內存空間,一種是用堆的內存空間,還有一個是靜態存儲區。

三者的區別是在于:

  • 棧內存:由于棧的空間比較小,所以訪問速度快(棧空間也是用我們的RAM空間)
  • 堆內存:RAM中任意一塊內存空間被占用(一般在new的時候會這樣)
  • 靜態存儲區:一般是在編譯和預編譯的時候指定的固定內存空間,所以訪問速度是最快的
  • 一般情況下,C/C++的在定義靜態的變量和方法的時候會將它們存儲到靜態存儲區中;在定義全局變量以及局部變量的時候將它們存儲到棧內存中;當使用new的時候將它們存儲在堆內存而將這個引用的地址存儲在棧中。


    JAVA內存分配

    JAVA分配內存空間也是三種,堆棧,堆,靜態存儲區。

    三者的區別:

  • 堆棧:存儲著對象的引用(地址)
  • 堆:是new出來的(也只能是這樣)
  • 靜態存儲區:與C/C++一樣
  • 最后垃圾回收器根據引用計數器等一系列回收方式將沒有存在引用的對象銷毀。


    方法區

    沒錯,這3種語言都是存儲方法的首地址。訪問方法的首地址來執行相應的方法。


    主函數

    對匯編而言,主函數不一定要為main,而是CS、IP開始執行的位置。C/C++還有JAVA在一般(也就是約定俗成的情況下)主函數的入口就是main。

    對于main方法而言,它其實也是一個方法的首地址(入口地址)。


    反思想

    我們可以通過對C/C++的重寫構造,使之成為一個讓人"看不懂"而功能又是一樣的程序。因為變量就是地址,而方法也是首地址。完全可以通過改變地址去調用任何你想調用的方法。也就是說,如果同時運行兩個程序,你知道其中一個程序中的子程序的首地址,那你完全可以C語音編程調用這個子程序。因為它們都只是內存地址而已。


    結尾

    以上都是自己的猜想。

    總結

    以上是生活随笔為你收集整理的关于汇编跟C/C++已经java的内存理解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。