• <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>
            franksunny的個(gè)人技術(shù)空間
            獲得人生中的成功需要的專注與堅(jiān)持不懈多過天才與機(jī)會(huì)。 ——C.W. Wendte

             

            關(guān)于變量的存儲(chǔ)問題

             

            以前從事上位機(jī)程序代碼的編寫,壓根不用很具體的考慮變量的具體存放位置,只知道以下概念就行了:

            1. 堆區(qū)( heap ):由程序員申請(qǐng)分配和釋放,屬動(dòng)態(tài)內(nèi)存分配方式,變量存放于動(dòng)態(tài)存儲(chǔ)區(qū),若程序員不釋放,程序結(jié)束時(shí)可能會(huì)由 OS 回收。不過這個(gè)內(nèi)存分配很容易引起問題,如果申請(qǐng)的內(nèi)存不釋放就會(huì)造成內(nèi)存泄漏;如果釋放的不是所要釋放的內(nèi)存,則輕者引起程序運(yùn)行結(jié)果出錯(cuò),重者系統(tǒng)崩潰。在C/C++語言中就是用mallocfree(C++常用newdelete)申請(qǐng)和釋放的內(nèi)存。

            2.棧區(qū)( stack ):編譯器自動(dòng)分配釋放,存放函數(shù)的形參值、局部變量的值,也是屬于動(dòng)態(tài)內(nèi)存分配方式,存放位置也為動(dòng)態(tài)存儲(chǔ)區(qū),它由系統(tǒng)分配,所以執(zhí)行效率也高,不過自由度小,聲明時(shí)就得決定其具體大小。

            3.全局區(qū)(靜態(tài)區(qū))( static ):全局變量和靜態(tài)變量的存儲(chǔ)是放在一塊的,屬于靜態(tài)存儲(chǔ)區(qū),而且初始化的全局變量和靜態(tài)變量在一塊區(qū)域,未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域。程序結(jié)束后由系統(tǒng)釋放,所以也不會(huì)造成內(nèi)存問題。

            除了以上的變量外,還有兩類存放位置,文字常量區(qū)和程序代碼區(qū),兩者都是由系統(tǒng)分配和釋放,且文字常量區(qū)和前面三區(qū)合成為程序數(shù)據(jù)區(qū),與程序代碼區(qū)相對(duì)應(yīng)。

            以上所講的內(nèi)存,都只是RAM而并非ROM,因?yàn)樵谏衔粰C(jī)編程中我們不可能去動(dòng)內(nèi)存儲(chǔ)器的ROM,通常說的內(nèi)存條就是RAM。(記得上周跟華為的人面試,還在那邊胸有成竹地講RAMROM呢,現(xiàn)在想來真是慚愧得很)

             

            現(xiàn)在工作中用到MSP430Flash類型的mcu,在編程時(shí)考慮就不能那樣迷迷糊糊的了,首先mcu給的RAM畢竟有限,能到4K已經(jīng)很貴了,為此很多變量像表格數(shù)據(jù)之類的必須和程序一起放到ROM中去。

            我用到的IAREWB for 430的編譯器,它內(nèi)在規(guī)定就是加const 定義的變量和代碼段被放到ROM中,全局(以及靜態(tài))變量和局部變量的位置仍然在RAM中,這些量顯然掉電時(shí)也是會(huì)跟著掉的。不是說const的定義的是“常量”嗎,是不能更改的啊,但是我要用到的變量是要更改的,那該怎么辦呢?不錯(cuò)我們?cè)诔绦蛑惺遣荒苤苯舆M(jìn)行修改這些數(shù)據(jù)量了,但是可以通過寫flash操作來對(duì)其進(jìn)行修改。也許有人會(huì)覺得我大驚小怪,大概因?yàn)槲乙郧皩W(xué)單片機(jī)不夠用心吧,總之到現(xiàn)在用的時(shí)候才知道些ROMRAM的確切不同。

            上面提到的const定義的“常量”及其它具體的關(guān)于constC/C++語言中的用法,可以參看Effictive C++More Effictive C++以及網(wǎng)絡(luò)上其它人的總結(jié)。以下給出一些別人總結(jié)的轉(zhuǎn)載,我覺得還是蠻有益。如果有侵權(quán),請(qǐng)通知本人

            內(nèi)存儲(chǔ)器外存儲(chǔ)器

            1.         內(nèi)存儲(chǔ)器

            1.       內(nèi)存的基本概念

            內(nèi)存(內(nèi)存儲(chǔ)器)是微型計(jì)算機(jī)主機(jī)的組成部分,用來存放當(dāng)前正在使用的或隨時(shí)要使用的程序或數(shù)據(jù)。

            CPU可以直接訪問內(nèi)存。

            微機(jī)以字節(jié)為單位線性地組織內(nèi)存儲(chǔ)器,每個(gè)存儲(chǔ)單元(一個(gè)字節(jié))都有一個(gè)唯一的編號(hào)。24位地址總線可以提供的地址編號(hào)為224=16M字節(jié)。

            內(nèi)存儲(chǔ)器按其工作特點(diǎn)分為:只讀存儲(chǔ)器ROMRead-Only Memory)和隨機(jī)存取存儲(chǔ)器RAMRandom Access Memory)。

            2.   RAM的種類

             動(dòng)態(tài)內(nèi)存DRAMDynamic RAM):需要周期性地給電容充電(刷新)。這種存儲(chǔ)器集成度較高、價(jià)格較低,但由于需要周期性地刷新,存取速度較慢。一種叫做SDRAM的新型DRAM,由于采用與系統(tǒng)時(shí)鐘同步的技術(shù),所以比DRAM快的多。當(dāng)今,多數(shù)計(jì)算機(jī)用的都是SDRAM

             靜態(tài)內(nèi)存SRAMStatic RAM):靜態(tài)RAM是利用雙穩(wěn)態(tài)的觸發(fā)器來存儲(chǔ)"1""0" 的。"靜態(tài)"的意思是指它不需要像DRAM那樣經(jīng)常刷新。所以,SRAM比任何形式的DRAM都快得多,也穩(wěn)定得多。但SRAM的價(jià)格比DRAM貴得多,所以只用在特殊場(chǎng)合(如高速緩沖存儲(chǔ)器Cache)。

            3.       內(nèi)存條

            內(nèi)存集成電路比CPU芯片小一些,通常封裝在一條形電路板上,俗稱內(nèi)存條。

            4.       高速緩沖存儲(chǔ)器

            為提高CPU的處理速度,當(dāng)今計(jì)算機(jī)中大都配有高速緩沖存儲(chǔ)器(cache),也稱緩存,實(shí)際上是一種特殊的高速存儲(chǔ)器。

            緩存的存取速度比內(nèi)存要快,所以就提高了處理速度。

            多數(shù)現(xiàn)代計(jì)算機(jī)都配有兩級(jí)緩存。

            一級(jí)緩存也叫主緩存,或內(nèi)部緩存,直接設(shè)計(jì)在CPU芯片內(nèi)部。一級(jí)緩存容量很小,通常在8KB ~ 64KB之間。

            二級(jí)緩存也叫外部緩存,不在CPU內(nèi)部而是獨(dú)立的SRAM芯片,其速度比一級(jí)緩存稍慢,但容量較大,多在64KB ~ 2MB之間。人們討論緩存時(shí),通常是指外部緩存。

            當(dāng)CUP需要指令或數(shù)據(jù)時(shí),實(shí)際檢索存儲(chǔ)器的順序是:首先檢索一級(jí)緩存,然后二級(jí)緩存,再往后是RAM

            5.       只讀存儲(chǔ)器

            只讀存儲(chǔ)器(Read Only Memory,縮寫ROM)不能寫入而只能讀出數(shù)據(jù),其中的信息是在制造時(shí)一次寫入的。

            只讀存儲(chǔ)器常用來存放固定不變、重復(fù)使用的程序、數(shù)據(jù)或信息,如存放漢字庫、各種專用設(shè)備的控制程序等。最典型的是ROM BIOS(基本輸入/輸出系統(tǒng)),其中部分內(nèi)容適用于啟動(dòng)計(jì)算機(jī)的指令,內(nèi)容固定但每次開機(jī)時(shí)都要執(zhí)行。存儲(chǔ)在ROM中的指令叫微程序,這樣的ROM成為固件。

            其他形式的只讀存儲(chǔ)器

             可編程只讀存儲(chǔ)器PROMProgrammable ROM):一種空白ROM,用戶可按照自己的需要對(duì)其編程。輸入PROM的指令叫作微碼,一旦微碼輸入,PROM的功能就和普通ROM一樣,內(nèi)容不能消除和改變。

             可擦除的可編程的只讀存儲(chǔ)器E-PROMErasable Programmable ROM),可以從計(jì)算機(jī)上取下來,用特殊的設(shè)備擦除其內(nèi)容后重新編程。

             閃存(flashROM,它不像PROMEPROM那樣只能一次編程,而是可以電擦除,重新編程。閃存ROM常用于個(gè)人電腦、蜂窩電話、數(shù)字相機(jī)、個(gè)人數(shù)字助手等,其容量在1 ~ 40MB之間。

            6.       CMOS存儲(chǔ)器

            CMOSComplementary metal oxide)互補(bǔ)金屬氧化物半導(dǎo)體

            計(jì)算機(jī)需要保存一些配置信息,如硬盤驅(qū)動(dòng)器和鍵的類型;日期、時(shí)間以及其它啟動(dòng)計(jì)算機(jī)所需要的信息等。他們不需要頻繁變化,又不能一成不變,需要時(shí)(升級(jí)或更換設(shè)備)要適當(dāng)變化。

            CMOS存儲(chǔ)器可以滿足這種要求。計(jì)算機(jī)關(guān)機(jī)后仍能維持其中存儲(chǔ)的信息。COMS中的信息可以改變,比如計(jì)算機(jī)更換硬盤之后,可以通過執(zhí)行CMOS配置程序與機(jī)器交互,更改CMOS中的信息。

            2.         外存儲(chǔ)器

            外存儲(chǔ)器一般不直接與微處理器打交道,外存中的數(shù)據(jù)應(yīng)先調(diào)入內(nèi)存,再由微處理器進(jìn)行處理。為了增加內(nèi)存容量,方便讀寫操作,有時(shí)將硬盤的一部分當(dāng)做內(nèi)存使用,這就是虛擬內(nèi)存。虛擬內(nèi)存利用在硬盤上建立"交換文件"的方式,把部分應(yīng)用程序(特別是己閑置的應(yīng)用程序)所用到的內(nèi)存空間搬到硬盤上去,以此來增加可使用的內(nèi)存空間和彈性;當(dāng)然,容量的增加是以犧牲速度為代價(jià)的。交換文件是暫時(shí)性的,應(yīng)用程序執(zhí)行完畢便自動(dòng)刪除。

            磁盤存儲(chǔ)器 有以下三部分組成: 軟磁盤驅(qū)動(dòng)器 軟磁盤控制器 軟磁盤片:3.5英寸5.25英寸兩種 3.5英寸軟磁盤:

                 磁道(track):從外向里編號(hào)為0 ~ 79,共80道。

            扇區(qū)(sector):在每個(gè)磁道上劃分18個(gè)扇區(qū),編號(hào)為0 ~ 17,共18個(gè)扇區(qū)。每個(gè)扇區(qū)的容量為512K個(gè)字節(jié)。

            簇(cluster):若干個(gè)扇區(qū)構(gòu)成一個(gè)簇,它是磁盤存儲(chǔ)分配的單位。

            格式化:用戶對(duì)軟盤的初始化操作,其包括磁道數(shù)、扇區(qū)數(shù)的劃分以及軟盤初始信息的寫入。 軟盤容量的計(jì)算公式: 80 18 512 2=1474560字節(jié)=1440K字節(jié)≈1.44MB 寫保護(hù)口:若該口可以透光,則此盤處于寫保護(hù)狀態(tài),即:只能讀取信息,不能寫入數(shù)據(jù)。反之,可讀可寫。

             

            關(guān)于SDRDDRRAMBUS公司RDRAM  關(guān)于當(dāng)前PC用內(nèi)存條方面的一個(gè)帖子

             

            posted on 2007-06-01 15:00 frank.sunny 閱讀(3124) 評(píng)論(2)  編輯 收藏 引用 所屬分類: 硬件開發(fā)概念掃盲

            FeedBack:
            # re: 關(guān)于變量的存儲(chǔ)問題
            2007-06-04 14:05 | picasa
            挺全面  回復(fù)  更多評(píng)論
              
            # re: 關(guān)于變量的存儲(chǔ)問題
            2008-01-14 20:21 | qi
            很棒的總結(jié)!!  回復(fù)  更多評(píng)論
              

            常用鏈接

            留言簿(13)

            隨筆分類

            個(gè)人其它博客

            基礎(chǔ)知識(shí)鏈接

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            久久国产精品77777| 国产成人无码精品久久久免费| 久久久久亚洲精品天堂久久久久久| 97久久综合精品久久久综合 | 国产一久久香蕉国产线看观看| 久久免费的精品国产V∧| 久久996热精品xxxx| 亚洲狠狠婷婷综合久久久久| 久久精品亚洲日本波多野结衣| 亚洲国产二区三区久久| 久久这里都是精品| 久久九九亚洲精品| 久久久亚洲欧洲日产国码是AV| 久久精品一区二区国产| 色天使久久综合网天天| 青青青国产成人久久111网站| 最新久久免费视频| 91性高湖久久久久| 欧美丰满熟妇BBB久久久| 无码精品久久一区二区三区 | 99久久中文字幕| 怡红院日本一道日本久久| 国产亚洲精久久久久久无码77777| 国产99久久久国产精品~~牛| 久久综合国产乱子伦精品免费| 欧美久久综合九色综合| 国内精品久久久久影院网站| 国产成人久久精品区一区二区| 午夜精品久久久久成人| 久久久久亚洲AV成人网人人网站| 91精品国产综合久久精品| 无码久久精品国产亚洲Av影片| 偷窥少妇久久久久久久久| 色播久久人人爽人人爽人人片aV| 天天爽天天爽天天片a久久网| 久久精品国产久精国产思思| 欧洲精品久久久av无码电影| 麻豆一区二区99久久久久| 国内精品伊人久久久久AV影院| 日韩精品久久无码人妻中文字幕| 人妻少妇久久中文字幕|