亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C ++中的堆?;蚨阎械娜謨却婀芾??

C ++中的堆?;蚨阎械娜謨却婀芾??如果我在C ++應用程序中全局聲明數據結構,它是否會消耗堆棧內存或堆內存?例如struct AAA{.../.../.../../..}arr[59652323];
查看完整描述

3 回答

?
胡說叔叔

TA貢獻1804條經驗 獲得超8個贊


由于我對答案不滿意,并希望同樣的karjatkar想要學習的不僅僅是一個簡單的是/否答案,在這里你走了。

通常,進程分配了5個不同的內存區域

  1. 代碼 - 文本段

  2. 初始化數據 - 數據段

  3. 未初始化的數據 - bss段

如果您真的想學習保存的內容,請閱讀并為這些書簽添加書簽:

編譯器,裝配器,鏈接器和裝載器:簡要介紹(見表w.5)

記憶中程序的剖析


查看完整回答
反對 回復 2019-08-09
?
當年話下

TA貢獻1890條經驗 獲得超9個贊

這里的問題是問題。讓我們假設你有一個很小的C(++也是,他們以相同的方式處理這個)程序,如下所示:


/* my.c */


char * str = "Your dog has fleas.";  /* 1 */

char * buf0 ;                         /* 2 */


int main(){

    char * str2 = "Don't make fun of my dog." ;  /* 3 */

    static char * str3 = str;         /* 4 */

    char * buf1 ;                     /* 5 */

    buf0 = malloc(BUFSIZ);            /* 6 */

    buf1 = malloc(BUFSIZ);            /* 7 */


    return 0;

}

這既不在堆上的堆棧NOR上分配。相反,它被分配為靜態數據,并在大多數現代機器上放入自己的內存段。實際的字符串也被分配為靜態數據,并放入正確思考的機器中的只讀段。

只是一個靜態分配的指針; 靜態數據中的一個地址空間。

具有在堆棧上分配的指針,并且在main返回時將被有效地釋放。字符串,因為它是一個常量,在靜態數據空間中與其他字符串一起分配。

實際上分配與2完全相同。static關鍵字告訴您它不會在堆棧上分配。

......但是buf1在堆棧上,并且

... malloc的緩沖區空間在堆上。

順便說一下,孩子們不要在家里試試。  malloc具有感興趣的回報值; 你應該經常檢查返回值。

例如:


char * bfr;

if((bfr = malloc(SIZE)) == NULL){

   /* malloc failed OMG */

   exit(-1);

}


查看完整回答
反對 回復 2019-08-09
?
慕標琳琳

TA貢獻1830條經驗 獲得超9個贊

通常它既不消耗也不消耗。它嘗試將它們分配在一個內存段中,該段可能保持為程序執行的常量。它可能是bss,堆棧,堆或數據。


查看完整回答
反對 回復 2019-08-09
  • 3 回答
  • 0 關注
  • 558 瀏覽

添加回答

了解更多

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號