<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 單片機C語言中 static 用法小結

          單片機C語言中 static 用法小結

          作者: 時間:2016-11-18 來源:網(wǎng)絡 收藏
          一、c程序存儲空間布局

          C程序一般由下列部分組成:

          本文引用地址:http://www.ex-cimer.com/article/201611/315900.htm

          1)正文段——CPU執(zhí)行的機器指令部分;少量的液晶字庫等也放在這里;只讀,防止程序由于意外事故而修改自身指令;
          2)初始化數(shù)據(jù)段(數(shù)據(jù)段)——在程序中所有賦了初值的全局變量,存放在這里。
          3)非初始化數(shù)據(jù)段(bss段)——在程序中沒有初始化的全局變量;內(nèi)核將此段初始化為0。
          4)棧——增長方向:自頂向下增長;自動變量以及每次函數(shù)調(diào)用時所需要保存的信息(返回地址;環(huán)境信息)。
          5)堆——動態(tài)存儲分。

          |-----------|
          | |
          |-----------|
          | 棧 |
          |-----------|
          | | |
          | |/ |
          | |
          | /| |
          | | |
          |-----------|
          | 堆 |
          |-----------|
          | 未初始化 |
          |-----------|
          | 初始化 |
          |-----------|
          | 正文段 |
          |-----------|

          二、static的作用
          1、內(nèi)部標識,也就是說無論是定義函數(shù)還是變量,只要有了static,就不能被外部調(diào)用;
          舉例說明:static char i = 0;
          static int putchar(int c );
          {
          static char a = 0;
          ....a++;.....

          }
          extern sprintf(const char *format , ... );
          {
          putchar(...);
          }
          假設以上變量及函數(shù)都在uart.c的文件中main()函數(shù)是在main.c中,那么,在main中只能調(diào)用sprintf,而不能直接調(diào)用putchar,也不能直接用變量 i。

          2、靜態(tài)變量,我認為這個是針對于static定義的局部變量而言的,除了只能在定義它的函數(shù)內(nèi)局部使用外其他的和全局變量是一樣的(只在第一次調(diào)用時初始化,用完后空間不會釋放,已存值不會改變)。比方說以上的a在第一次調(diào)用時被初始化為0.然后自加為1,那么第二次調(diào)用時(無論誰調(diào)用)a的初始值就是1,運行完就是2。



          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();