C/C++內存分區


隨手搜的一個問題,本來只是想印證一下自己的想法,怎料這個問題居然還有這么多不同的說法。根據網上的資料和我自己的觀點,總結如下:

在C/C++中內存分為五個區:棧區、堆區、(自由存儲區、)全局/靜態存儲區和常量存儲區

  • 棧區
    • 通常是局部變量和函數參數,由編譯器自動分配釋放
  • 堆區
    • 本來在我的理解中,動態分配的內存都應該在堆區,即new和malloc的內存都在此,現在才發現是把C和C++的記混了
    • C++中使用malloc分配的內存,在堆區,而由new分配的內存,則在自由存儲區
    • 關於自由存儲區和堆區的概念相關,見C++ 自由存儲區是否等價於堆?, 感謝小伙伴suilin的提醒。
  • 自由存儲區
    • C++中,由new分配的內存,在這個區。
    • 而在C語言中是沒有這個區的,由malloc分配的內存,在堆區
  • 全局/靜態存儲區
    • 全局變量和靜態變量。
    • 在C語言中,全局變量又分為初始化的和未初始化的,其中初始化的全局變量和靜態變量在這一分區,未初始化的全局變化和靜態變量在與之相鄰的另一區域中(BSS段)
    • 在C++中,沒有區分變量的初始化和未初始化,所以,都在這一內存區
  • 常量存儲區
    • 存放常量的區域,不允許修改

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com