新聞中心

        EEPW首頁 > 測試測量 > 設計應用 > labview深入探索-----內存管理和緩存重用

        labview深入探索-----內存管理和緩存重用

        作者: 時間:2017-01-09 來源:網絡 收藏
        使用過常規C語言的朋友都知道,C允許編程者,申請內存,再分配內存和釋放內存,這為編程者提供了極大的方便的同時,也造成了非常多的隱患,可以說,C程序的運行中許多莫名其妙的錯誤都和內存泄露有關.程序可能連續運行幾個小時沒有任何問題,但突然就發生錯誤,對于一個比較復雜的程序,追蹤內存泄露非常困難,經常要借用第三方的專門的內存分析工具.

        C的內存錯誤最多的是兩種情況:

        本文引用地址:http://www.104case.com/article/201701/337246.htm

        1.數組越界:

        int Array[10];//系統自動分配10*4BYTE的空間

        for(int i=0;i<100;i++) Array[i]=i; //寫入前10個元素時沒有問題,超過10個,C會繼續向連續的內存空間寫數據

        如果該內存空間無用,沒有問題.如果這段內存空間被系統或者其它應用程序占用,錯誤的寫入可能會導致系統崩潰,經常提示的是發生意外錯誤,比較新的操作系統一般不會崩潰,會提示內存寫錯誤,應用程序退出.

        2.分配內存沒有釋放(內存泄露)

        int *p;//定義整型指針

        p=(int *)malloc(100*sizeof(int)); //申請100*4個字節的內存

        if(p==NULL) //系統無法分配,退出程序

        {

        return (errro);

        }

        free(p); //釋放申請的內存空間 如果沒有這個語句,重復調用這段程序,導致占用的內存空間越來越多.


        labview則完全不同,它的內存分配是由LV的內存管理器自動完成的,因此不存在用戶內存釋放的問題,也不存在數組越界的問題,既然如此,討論LV的內存管理有意義嗎?

        答案是:非常重要.經常有人抱怨,LV的運行速度緩慢,性能很差,這里主要的原因都是內存使用不當的原因.


        LV隨時都在不斷地進行內存分配,再分配和釋放的工作,只不過這些工作是由LV內存管理器自動進行的,對用戶來說是在后臺進行的,是不受用戶控制的.同時,內存管理器的工作是非常繁重和緩慢的,它的大量無意義的工作將會導致程序運行效率的急劇下降.

        改進LV內存使用的最好辦法是良好的編程風格.


        一個VI占用的內存空間分成四個部分.

        1.PANEL                   前面板

        2.BLOCK DIAGRAM          程序框圖

        3.CODE?。樱校粒茫拧             〈a空間

        4.DATA?。樱校粒茫拧             祿臻g


        代碼空間指的是框圖編譯后形成的機器碼所占的空間.

        數據空間包括前面板控制器和指示器的值和默認值,常量和動態定義的數據.

        當打開一個VI的時候,面板空間,代碼空間和數據空間載入內存,該VI的子VI的代碼空間和數據空間載入內存.

        如果選擇顯示程序框圖,則程序框圖空間也載入內存.


        可以看出,當打開一個VI時,LV只載入需要的部分,自VI只載入代碼空間和數據空間.所以不必要考慮子VI的前面板和程序框圖.如上圖,如果把主VI的部分分成多個SUBVI,可以有效地節約內存的使用.因為SUBVI一方面不再需要前面板和程序框圖,只有代碼空間和數據空間載入內存,并且在需要的時候,LV可以收回數據空間內存并重新利用.當我們打開一個非常大的,包含很少SUBVI的程序,速度會非常緩慢,相反,一個很大的包含很多的SUBVI的程序打開速度非常快,就是這個原因.


        當我們編寫VI的時候經常要查看它的內存使用情況,有幾種方法:

        一.通過ABOUT對話框,可以查到操作系統為LV分配的全部內存.全部內存包括打開的VI占用的和LV本身占用的.在打開LV之后,記錄下這個值(LV本身占用的),然后編輯你的VI,再查看ABOUT對話框,他們的差就是你的VI占用的內存,這個方法可以大概估計您的VI的內存使用情況


        二:通過FILE菜單中的show vi property(CTRL+I)來查看當前VI的內存使用情況.



        三.通過Profile Window 來查看.



        總結以上內容,得出幾個要點:

        .因為LV控制內存管理,因此很難知道LV的內存是如何分配的.

        .良好的編程風格會改進LV的內存使用情況.

        .VI的內存使用分成PANEL,BLOCK,CODE,DATA四部分.


        下面的部分詳細分析這四部分的內存是如何使用的.

        首先看看PANEL和BLOCK,這兩個部分是占用內存的主要部分.

        前面板主要是由控制器(control)和指示器(indicator)組成的,每個控制器和指示器都有自己的數據拷貝,在編輯的情況下我們可以隨意更改控制器和指示器的值,即使他們通過數據流連在一起,只要不運行,指示器沒有新的數據流到來,它始終保持原來的值.控制器和指示器的數據拷貝稱作操作數據,因為只用通過具體操作才能改變它的值,框圖的中的數據(數據流)稱作執行數據,因為只有VI運行時候才起作用.可以理解成連線上的數據.


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 云林县| 常熟市| 嫩江县| 宝鸡市| 镇宁| 淄博市| 百色市| 屏东市| 观塘区| 正蓝旗| 乾安县| 南召县| 太仓市| 稷山县| 家居| 清徐县| 瓦房店市| 库伦旗| 财经| 加查县| 垦利县| 石河子市| 任丘市| 麻栗坡县| 宁都县| 库尔勒市| 延安市| 林口县| 云安县| 临汾市| 南部县| 柳林县| 武胜县| 堆龙德庆县| 宝鸡市| 秦安县| 怀来县| 军事| SHOW| 台北县| 康乐县|