青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

eXile 的專欄

一個小疑問:C++頭文件中的靜態(tài)全局變量

  一般來說,靜態(tài)全局變量只應(yīng)該定義在實(shí)現(xiàn)文件中,但有時由于一些特殊的目的,也可能定義在頭文件中。比如在有些標(biāo)準(zhǔn)庫的實(shí)現(xiàn)中,就用這種方法來初始化標(biāo)準(zhǔn)流cin, cout,或者在在tr1庫中,也用這種方法來定義占位符。每一個包含該頭文件的實(shí)現(xiàn)文件中都擁有該變量的一份拷貝,這些變量放在運(yùn)行體的data段或者bss段。
   比如下面這個變量定義在一個頭文件中:
static int data[1024*1024];
   我把這個文件同時包含在幾個cpp文件中,按我的理解,這個程序占用的內(nèi)存應(yīng)該顯著增大,但是,從實(shí)際運(yùn)行結(jié)果來看,并沒有變化,生成的exe文件大小也沒有變化,這是因?yàn)檠舆t加載呢,還是被編譯器優(yōu)化掉了?有沒有明白的達(dá)人解釋一下。


posted on 2009-01-09 11:42 eXile 閱讀(6376) 評論(19)  編輯 收藏 引用 所屬分類: C/C++

評論

# re: 一個小疑問:C++頭文件中的靜態(tài)全局變量 2009-01-09 11:57 bug

靜態(tài)變量只會生成一份的吧.
就好像你在類中放了一個靜態(tài)成員變量,你初始化多個類,而靜態(tài)成員變量卻永遠(yuǎn)指向同一個地址  回復(fù)  更多評論   

# re: 一個小疑問:C++頭文件中的靜態(tài)全局變量 2009-01-09 11:57 飯中淹

你可以測試下,在不同的cpp里面輸出這個變量的地址,就什么都清楚了。

  回復(fù)  更多評論   

# re: 一個小疑問:C++頭文件中的靜態(tài)全局變量 2009-01-09 11:58 bug

一般情況都是在cpp里放定義,在頭文件中用extern 外部聲明而已.  回復(fù)  更多評論   

# re: 一個小疑問:C++頭文件中的靜態(tài)全局變量 2009-01-09 11:59 eXile

@飄雪

靜態(tài)全局變量是不用的,它的作用域只是該文件,聲明沒有意義  回復(fù)  更多評論   

# re: 一個小疑問:C++頭文件中的靜態(tài)全局變量 2009-01-09 12:00 eXile

@飯中淹
我測試過,地址是不同的  回復(fù)  更多評論   

# re: 一個小疑問:C++頭文件中的靜態(tài)全局變量 2009-01-09 12:05 eXile

@bug
會生成多份的,這和類的靜態(tài)變量是不一樣的  回復(fù)  更多評論   

# re: 一個小疑問:C++頭文件中的靜態(tài)全局變量[未登錄] 2009-01-09 12:21 steven

我測試過,多加一個cpp,內(nèi)存是會漲上去的,前提是給data拷貝數(shù)據(jù)。
//main.h

#ifndef STATICHEADER_H_
#define STATICHEADER_H_

static int point[1024*1024*10];

#endif

//main.cpp
#include "main.h"
#include "stdio.h"
int main()
{
getchar();
return 0;
}

//main1.cpp
#include "main.h"
#include "stdlib.h"
#include "stdio.h"
#include "string.h"

static int outPrint()
{
memset(point,0,sizeof(point));
printf("%p,%p\n",point,outPrint);
return 0;
}
static int x=outPrint();

把main1.cpp拷貝多份,然后編譯運(yùn)行,就可以看到每增加一個cpp,內(nèi)存會漲很多的。  回復(fù)  更多評論   

# re: 一個小疑問:C++頭文件中的靜態(tài)全局變量 2009-01-09 12:21 沈臻豪(foxtail)

我覺得是延遲加載,優(yōu)化貌似沒辦法解決這個問題的。你看看兩個版本運(yùn)行時的內(nèi)存占用情況怎么樣  回復(fù)  更多評論   

# re: 一個小疑問:C++頭文件中的靜態(tài)全局變量 2009-01-09 12:29 了修

應(yīng)該是進(jìn)行了編譯優(yōu)化:內(nèi)存折疊 了 這個在Thinking in C++中有描述
當(dāng)你在取不同的文件取它的地址的時候,這個時候要建立一個臨時變量,這個時候文件大小會發(fā)生變化。做下測試吧,偶現(xiàn)在沒有機(jī)器了,沒辦法做……
嘿嘿 做好了 發(fā)份郵件給我吧:iHorn@163.com  回復(fù)  更多評論   

# re: 一個小疑問:C++頭文件中的靜態(tài)全局變量 2009-01-09 12:33 eXile

看來確實(shí)是這樣的,只有定義,是不會加載內(nèi)存的,只有在實(shí)際使用時,才會加載。編譯優(yōu)化不太可能。  回復(fù)  更多評論   

# re: 一個小疑問:C++頭文件中的靜態(tài)全局變量 2009-01-09 13:08 Herb

如果不是類中的靜態(tài)變量,那么它和C的靜態(tài)量沒什么區(qū)別。  回復(fù)  更多評論   

# re: 一個小疑問:C++頭文件中的靜態(tài)全局變量 2009-01-09 13:27 嘯天豬

這不是編譯器的問題,而是OS的virtual memeory管理機(jī)制導(dǎo)致的

數(shù)據(jù)在實(shí)際使用之前,是不會占用內(nèi)存的——缺頁異常處理程序會為數(shù)據(jù)分配需要的內(nèi)存。

  回復(fù)  更多評論   

# re: 一個小疑問:C++頭文件中的靜態(tài)全局變量 2009-01-09 14:05 eXile

@嘯天豬
老兄說到點(diǎn)子上了。  回復(fù)  更多評論   

# re: 一個小疑問:C++頭文件中的靜態(tài)全局變量 2009-01-09 16:49 dev.zhu

這種很常見, 一般都是 宏
為了不使用全局變量而已  回復(fù)  更多評論   

# re: 一個小疑問:C++頭文件中的靜態(tài)全局變量 2009-01-13 09:54 夢在天涯

static的應(yīng)有一份!怎么會有不同的地址那!不使用之前是不分配的,這個倒是有可能啊!  回復(fù)  更多評論   

# re: 一個小疑問:C++頭文件中的靜態(tài)全局變量 2009-01-14 10:23 dev.zhu

@夢在天涯
建議你看看C語法
  回復(fù)  更多評論   

# re: 一個小疑問:C++頭文件中的靜態(tài)全局變量 2009-01-15 17:27 abettor

首先,對所有的CPP來講,實(shí)際上是同一個東西,大家共用一個空間。
其次,編譯出來的exe文件中沒有這塊1024*1024的空間存在,只是一個記號;只有系統(tǒng)運(yùn)行這個文件,也就是變成進(jìn)程后,系統(tǒng)才會在內(nèi)存中分配這塊空間。要清楚程序與進(jìn)程的關(guān)系。  回復(fù)  更多評論   

# re: 一個小疑問:C++頭文件中的靜態(tài)全局變量 2009-01-15 17:30 abettor

@abettor
補(bǔ)充一句,“運(yùn)行體的data段或者bss段”,這里很明顯,你所說的“運(yùn)行體”是進(jìn)程。研究PE文件格式,你會發(fā)現(xiàn)他不區(qū)分code段、data段等等概念,因?yàn)樗浅绦颍皇沁M(jìn)程。  回復(fù)  更多評論   

# re: 一個小疑問:C++頭文件中的靜態(tài)全局變量 2012-09-26 09:50 ligand

樓上說得對。樓主沒有研究過.exe文件(即PE格式)的基本知識。編譯器與鏈接器在生成exe文件時,時把指令、數(shù)據(jù)、元信息組織成性質(zhì)與用途不同的section。例如,程序指令一般放在.text或者.code這個section中;只讀(不能修改的)數(shù)據(jù)放在了.rdata中;未初始化的全局變量放在了.bss中;需要初始化的全局變量放在了.data中;此外,還有重定位信息使用的.reloc、線程局部存儲使用的.thread等等。。。

對于不需要初始化的全局變量所存放的section,實(shí)際上并不占用exe的實(shí)際文件空間。只是在section table中登記一個裝入內(nèi)存時的尺寸數(shù)值、在內(nèi)存中的開始(虛)地址。在exe裝入內(nèi)存成為一個進(jìn)程時,這些未初始化全局變量才會實(shí)際分配占用內(nèi)存。  回復(fù)  更多評論   

導(dǎo)航

<2025年10月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

統(tǒng)計(jì)

常用鏈接

留言簿(18)

隨筆分類

隨筆檔案

服務(wù)器編程

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产精品久久91精品| 麻豆成人av| 国产一区二区三区在线观看视频| 亚洲一区自拍| 亚洲综合国产精品| 在线观看一区视频| 亚洲激情视频在线| 欧美日韩一区二区三区在线看| 亚洲最新色图| 午夜激情综合网| 亚洲第一中文字幕| 久久精品道一区二区三区| 亚洲欧美日韩爽爽影院| 亚洲国产精品欧美一二99| 欧美激情一区二区久久久| 中国日韩欧美久久久久久久久| 一区二区三区日韩欧美精品| 国产日韩欧美综合精品| 欧美国产第一页| 国产精品高潮呻吟久久| 久久久国产精品一区二区中文 | 免费观看成人| 欧美日韩精品免费| 久久九九久久九九| 欧美日韩午夜精品| 久久亚洲美女| 国产精品久久77777| 欧美高清不卡在线| 国产精品永久免费视频| 欧美激情第10页| 国产一本一道久久香蕉| 日韩一区二区精品| 在线观看日韩av先锋影音电影院| 一区二区三区高清| 亚洲激情视频在线播放| 久久er99精品| 午夜精品久久久久久久久久久久久 | 亚洲影音先锋| 日韩视频在线播放| 久久精品夜色噜噜亚洲aⅴ| 亚洲欧美高清| 欧美日产一区二区三区在线观看| 蜜桃久久精品乱码一区二区| 国产精品毛片a∨一区二区三区|国 | 国内精品久久久久影院优| 一区二区三区久久精品| 亚洲人屁股眼子交8| 久久不射2019中文字幕| 欧美在线观看一区| 国产精品成人va在线观看| 亚洲欧洲日本一区二区三区| 韩国成人福利片在线播放| 欧美一区二区免费观在线| 午夜视频久久久| 国产精品亚洲综合色区韩国| 99国产精品久久久| 国产精品99久久久久久久久| 欧美精品一卡二卡| 亚洲精品美女在线观看播放| 亚洲精品视频一区二区三区| 久热精品在线| 欧美国产日韩一二三区| 亚洲国产欧洲综合997久久| 久久这里有精品15一区二区三区| 久久亚洲私人国产精品va媚药 | 国产精品久久97| 亚洲天堂久久| 久久精品国产免费观看| 黄色精品一区| 亚洲一区二区三区三| 国产老肥熟一区二区三区| 国产精品永久| 亚洲一区国产视频| 欧美在线观看视频| 国内精品久久久久久久影视麻豆 | 日韩视频不卡中文| 亚洲小说春色综合另类电影| 欧美日韩网址| 香蕉久久夜色精品国产使用方法| 久久精品一区中文字幕| 激情久久久久久久| 欧美精品成人91久久久久久久| 亚洲精品在线视频| 性欧美大战久久久久久久久| 国产亚洲激情视频在线| 美日韩精品视频| av成人老司机| 久久久久久午夜| 日韩视频一区二区| 国产午夜精品一区理论片飘花| 久久精品主播| 99热精品在线| 免费视频一区| 亚洲欧美在线网| 有坂深雪在线一区| 欧美亚洲动漫精品| 久久视频这里只有精品| 一区二区三区日韩精品视频| 久久影视三级福利片| 一区二区三区久久久| 国产欧美亚洲精品| 欧美日韩第一页| 久久精品水蜜桃av综合天堂| 亚洲美女啪啪| 欧美国产在线观看| 欧美一区二区三区婷婷月色| 亚洲人成网在线播放| 国产亚洲激情| 国产精品久久久久久久久久久久久| 久久精品国产清高在天天线| 一区二区91| 亚洲国产欧美日韩另类综合| 久久精品99无色码中文字幕 | 亚洲一区制服诱惑| 亚洲国产美女| 韩国av一区| 国产伦一区二区三区色一情| 欧美麻豆久久久久久中文| 久久影院午夜片一区| 午夜日韩视频| 亚洲在线观看免费| 亚洲人体大胆视频| 欧美jizzhd精品欧美喷水| 久久精品国产第一区二区三区最新章节 | 一本到12不卡视频在线dvd| 麻豆国产va免费精品高清在线| 亚洲欧美日韩精品久久| 夜夜夜久久久| 99精品欧美一区| 久久精品人人| 久久精视频免费在线久久完整在线看| 亚洲二区在线观看| 在线成人激情| 激情偷拍久久| 狠狠久久亚洲欧美专区| 国产日韩精品一区| 国产女人水真多18毛片18精品视频| 欧美日韩国产在线看| 欧美日韩免费一区二区三区| 欧美国产一区二区在线观看 | 亚洲色图自拍| 亚洲一区二区av电影| 亚洲一级二级| 欧美亚洲一区在线| 久久精彩免费视频| 久久综合精品国产一区二区三区| 久久久久国色av免费看影院| 久久精品亚洲一区二区三区浴池| 久久国产精品99精品国产| 久久精品人人做人人综合| 久久性天堂网| 欧美激情第六页| 欧美日韩影院| 国产欧美精品| 亚洲第一区在线观看| 亚洲精品美女| 亚洲永久免费av| 久久久久成人网| 欧美电影免费观看大全| 亚洲国产精品一区| 在线亚洲高清视频| 欧美一区二区免费观在线| 久久综合激情| 国产精品露脸自拍| 激情综合久久| 亚洲视屏一区| 久久综合网hezyo| 亚洲精品免费在线播放| 亚洲女优在线| 免费不卡亚洲欧美| 欧美性色视频在线| 激情视频一区| 亚洲一区二区三区四区中文| 久久久久高清| 亚洲美女电影在线| 校园春色综合网| 欧美男人的天堂| 狠狠色狠狠色综合人人| 9i看片成人免费高清| 久久久国产91| 99热这里只有成人精品国产| 欧美中文字幕视频| 欧美日韩综合不卡| **网站欧美大片在线观看| 亚洲视频香蕉人妖| 欧美成人免费网站| 亚洲欧美不卡| 欧美三级乱码| 亚洲国产日韩一区| 久久精品理论片| 中文一区二区| 欧美久久久久久| 亚洲国产高清aⅴ视频| 欧美一区二区视频网站| 亚洲久久视频| 欧美国产日韩xxxxx| 极品少妇一区二区三区| 欧美呦呦网站| 亚洲欧美激情四射在线日| 欧美三区在线观看|