• <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的個人技術空間
            獲得人生中的成功需要的專注與堅持不懈多過天才與機會。 ——C.W. Wendte

             

            關于變量的存儲問題

             

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

            1. 堆區( heap ):由程序員申請分配和釋放,屬動態內存分配方式,變量存放于動態存儲區,若程序員不釋放,程序結束時可能會由 OS 回收。不過這個內存分配很容易引起問題,如果申請的內存不釋放就會造成內存泄漏;如果釋放的不是所要釋放的內存,則輕者引起程序運行結果出錯,重者系統崩潰。在C/C++語言中就是用mallocfree(C++常用newdelete)申請和釋放的內存。

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

            3.全局區(靜態區)( static ):全局變量和靜態變量的存儲是放在一塊的,屬于靜態存儲區,而且初始化的全局變量和靜態變量在一塊區域,未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。程序結束后由系統釋放,所以也不會造成內存問題。

            除了以上的變量外,還有兩類存放位置,文字常量區和程序代碼區,兩者都是由系統分配和釋放,且文字常量區和前面三區合成為程序數據區,與程序代碼區相對應。

            以上所講的內存,都只是RAM而并非ROM,因為在上位機編程中我們不可能去動內存儲器的ROM,通常說的內存條就是RAM。(記得上周跟華為的人面試,還在那邊胸有成竹地講RAMROM呢,現在想來真是慚愧得很)

             

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

            我用到的IAREWB for 430的編譯器,它內在規定就是加const 定義的變量和代碼段被放到ROM中,全局(以及靜態)變量和局部變量的位置仍然在RAM中,這些量顯然掉電時也是會跟著掉的。不是說const的定義的是“常量”嗎,是不能更改的啊,但是我要用到的變量是要更改的,那該怎么辦呢?不錯我們在程序中是不能直接進行修改這些數據量了,但是可以通過寫flash操作來對其進行修改。也許有人會覺得我大驚小怪,大概因為我以前學單片機不夠用心吧,總之到現在用的時候才知道些ROMRAM的確切不同。

            上面提到的const定義的“常量”及其它具體的關于constC/C++語言中的用法,可以參看Effictive C++More Effictive C++以及網絡上其它人的總結。以下給出一些別人總結的轉載,我覺得還是蠻有益。如果有侵權,請通知本人

            存儲器外存儲器

            1.         內存儲器

            1.       內存的基本概念

            內存(內存儲器)是微型計算機主機的組成部分,用來存放當前正在使用的或隨時要使用的程序或數據。

            CPU可以直接訪問內存。

            微機以字節為單位線性地組織內存儲器,每個存儲單元(一個字節)都有一個唯一的編號。24位地址總線可以提供的地址編號為224=16M字節。

            內存儲器按其工作特點分為:只讀存儲器ROMRead-Only Memory)和隨機存取存儲器RAMRandom Access Memory)。

            2.   RAM的種類

             動態內存DRAMDynamic RAM):需要周期性地給電容充電(刷新)。這種存儲器集成度較高、價格較低,但由于需要周期性地刷新,存取速度較慢。一種叫做SDRAM的新型DRAM,由于采用與系統時鐘同步的技術,所以比DRAM快的多。當今,多數計算機用的都是SDRAM

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

            3.       內存條

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

            4.       高速緩沖存儲器

            為提高CPU的處理速度,當今計算機中大都配有高速緩沖存儲器(cache),也稱緩存,實際上是一種特殊的高速存儲器。

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

            多數現代計算機都配有兩級緩存。

            一級緩存也叫主緩存,或內部緩存,直接設計在CPU芯片內部。一級緩存容量很小,通常在8KB ~ 64KB之間。

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

            CUP需要指令或數據時,實際檢索存儲器的順序是:首先檢索一級緩存,然后二級緩存,再往后是RAM

            5.       只讀存儲器

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

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

            其他形式的只讀存儲器

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

             可擦除的可編程的只讀存儲器E-PROMErasable Programmable ROM),可以從計算機上取下來,用特殊的設備擦除其內容后重新編程。

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

            6.       CMOS存儲器

            CMOSComplementary metal oxide)互補金屬氧化物半導體

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

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

            2.         外存儲器

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

            磁盤存儲器 有以下三部分組成: 軟磁盤驅動器 軟磁盤控制器 軟磁盤片:3.5英寸5.25英寸兩種 3.5英寸軟磁盤:

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

            扇區(sector):在每個磁道上劃分18個扇區,編號為0 ~ 17,共18個扇區。每個扇區的容量為512K個字節。

            簇(cluster):若干個扇區構成一個簇,它是磁盤存儲分配的單位。

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

             

            關于SDRDDRRAMBUS公司RDRAM  關于當前PC用內存條方面的一個帖子

             

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

            FeedBack:
            # re: 關于變量的存儲問題
            2007-06-04 14:05 | picasa
            挺全面  回復  更多評論
              
            # re: 關于變量的存儲問題
            2008-01-14 20:21 | qi
            很棒的總結!!  回復  更多評論
              

            常用鏈接

            留言簿(13)

            隨筆分類

            個人其它博客

            基礎知識鏈接

            最新評論

            閱讀排行榜

            評論排行榜

            色播久久人人爽人人爽人人片aV| 久久久久亚洲精品天堂| 亚洲欧洲精品成人久久曰影片| 亚洲人成无码www久久久| 无遮挡粉嫩小泬久久久久久久| 国内精品久久久久影院免费| 久久五月精品中文字幕| 亚洲国产一成人久久精品| 久久电影网一区| 久久久这里有精品| 99久久精品国产麻豆| 亚洲欧洲久久久精品| 97精品国产97久久久久久免费 | 热久久视久久精品18| 国产亚洲精品美女久久久| 久久久久综合中文字幕| 精品人妻久久久久久888| 一本久久免费视频| 成人精品一区二区久久久| 欧美喷潮久久久XXXXx| 精品国产日韩久久亚洲| 亚洲国产精品久久久久网站| 亚洲国产另类久久久精品黑人| 久久精品亚洲福利| 国产亚洲欧美成人久久片| 亚洲精品无码久久久影院相关影片| 久久综合久久性久99毛片| 久久亚洲欧美日本精品| 久久影院综合精品| 亚洲成色WWW久久网站| 亚洲国产成人久久综合碰| 久久国产香蕉视频| 国产香蕉97碰碰久久人人| 欧美日韩中文字幕久久伊人| 国产产无码乱码精品久久鸭| 久久国产亚洲高清观看| 亚洲狠狠婷婷综合久久久久| 国内精品久久久久影院薰衣草 | 久久国产精品久久| 久久国产免费观看精品3| 日韩精品久久无码人妻中文字幕|