在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

嵌入式軟件內(nèi)存與指針相關(guān)問題

麥辣雞腿堡 ? 來源:嵌入式系統(tǒng) ? 作者:嵌入式系統(tǒng) ? 2023-12-07 16:07 ? 次閱讀

隱性的內(nèi)存泄露問題

內(nèi)存泄漏(Memory Leak)是指程序中已動(dòng)態(tài)分配的堆內(nèi)存由于某種原因程序未釋放或無法釋放,造成系統(tǒng)內(nèi)存的浪費(fèi),導(dǎo)致程序運(yùn)行速度減慢甚至系統(tǒng)崩潰等嚴(yán)重后果。內(nèi)存泄露是一個(gè)嚴(yán)重的慢性病,不會(huì)立即展現(xiàn),但不知道未來的哪一天,所有的設(shè)備,會(huì)在相近的時(shí)間點(diǎn)爆發(fā)問題。

內(nèi)存泄漏還會(huì)導(dǎo)致系統(tǒng)意外的重啟,重啟的原因可能千奇百怪。因此,檢測(cè)和解決內(nèi)存泄漏,就顯得非常重要。

1. 泄漏的原因

內(nèi)存泄漏主要是發(fā)生在堆內(nèi)存分配方式中,即malloc方式中,申請(qǐng)的內(nèi)存沒有得到釋放,或者對(duì)應(yīng)的指針被被覆蓋,內(nèi)存直接泄漏。因?yàn)閮?nèi)存泄漏屬于程序運(yùn)行中的問題,無法通過編譯識(shí)別,主要在程序運(yùn)行過程中來判別和診斷。

2. 動(dòng)態(tài)檢測(cè)或監(jiān)控是否內(nèi)存泄露

監(jiān)控系統(tǒng)內(nèi)存,周期性監(jiān)控堆中可用內(nèi)存的大小,是檢測(cè)系統(tǒng)是否有內(nèi)存泄漏的最有效的手段。系統(tǒng)的內(nèi)存短期會(huì)隨著業(yè)務(wù)數(shù)據(jù)的變化而變化,但長(zhǎng)期來看,可用的剩余可用內(nèi)存會(huì)圍繞一個(gè)中軸線上下波動(dòng),如果存在內(nèi)存泄漏,其剩余可用內(nèi)存隨隨著時(shí)間的推移逐漸減少。

3. 如何找到在哪兒內(nèi)存泄露

可以使用工具檢測(cè)代碼中有沒有靜態(tài)的內(nèi)存泄露,也可以在代碼中增加標(biāo)記,檢測(cè)長(zhǎng)期未釋放的堆是誰申請(qǐng)的,在代碼中查找。可以參考文章《動(dòng)態(tài)內(nèi)存管理及防御性編程》。

指針跑飛的問題

指針跑飛就是指針指向不正確的位置,指針未初始化或數(shù)組/指針越界訪問,導(dǎo)致系統(tǒng)崩潰。

指針跑飛是常見的問題,問題很嚴(yán)重,但解決起來其實(shí)并不難,指針跑飛系統(tǒng)crash時(shí),如果平臺(tái)軟件會(huì)打印出函數(shù)調(diào)用棧、segment fault錯(cuò)誤、代碼出錯(cuò)的地方、coredump文件等信息。有了這些信息,再分析源代碼,其實(shí)是很容發(fā)現(xiàn)或找出當(dāng)前代碼中指針跑飛的原因的。

如果基于第三方的SDK開發(fā),指針跑飛直接就重啟,可能不會(huì)有任何提示,因此,最好能夠在編碼時(shí)就能夠提前預(yù)防,而不是等待程序跑飛之后再定位解決 。

常見的手段:

1、熟悉和遵守代碼編寫規(guī)范,加強(qiáng)代碼的評(píng)審,把問題消滅在編碼階段。

2、靜態(tài)檢測(cè)工具對(duì)代碼進(jìn)行檢測(cè)。

3、增加邊界性測(cè)試用例,一般指針異常是在邊界或異常情形下發(fā)生的。

4、增加異常場(chǎng)景的測(cè)試,異常場(chǎng)景是違反常規(guī)的測(cè)試場(chǎng)景,這些異常業(yè)務(wù)場(chǎng)景,能夠盡早shi發(fā)現(xiàn)隱藏的問題。

空指針的問題

空指針是“指針跑飛”的一種特殊情況,即指針為NULL,通常出現(xiàn)在指針用NULL值初始化后,在某些情況下沒有給指針賦值,就直接使用指針范圍內(nèi)存。或者接收函數(shù)返回的指針變量,忽略了函數(shù)返回NULL的情形。

在使用指針前,檢查指針是否為空,如果為空,在代碼中執(zhí)行異常處理流程,如打印出錯(cuò)信息,或者ASSERT,這樣就可以避免引起更嚴(yán)重的問題,相對(duì)來說多使用一個(gè)if即可規(guī)避。

棧溢出導(dǎo)致的問題

棧溢出時(shí)會(huì)訪問不存在的RAM空間,造成代碼跑飛,這時(shí)無法得到溢出時(shí)的上下文數(shù)據(jù),也無法對(duì)后續(xù)的程序修改提供有用信息。

函數(shù)遞歸調(diào)用,系統(tǒng)要在棧中不斷保存函數(shù)調(diào)用時(shí)的現(xiàn)場(chǎng)和產(chǎn)生的變量,如果遞歸調(diào)用太深,就會(huì)造成棧溢出。函數(shù)內(nèi)局部數(shù)組變量的內(nèi)存空間過大,或者局部數(shù)組變量的下標(biāo)范圍溢出,破壞了棧空間中的內(nèi)容。這種問題容易解決但初始不容易查到原因。如果是帶操作系統(tǒng)的,一般系統(tǒng)內(nèi)核會(huì)直接提示棧空間不足,將任務(wù)棧空間加大,或者不靜態(tài)分配,用malloc動(dòng)態(tài)創(chuàng)建,從堆中分配的。平時(shí)編碼中禁止使用循環(huán)遞歸函數(shù)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3102

    瀏覽量

    74883
  • 嵌入式軟件
    +關(guān)注

    關(guān)注

    4

    文章

    244

    瀏覽量

    27078
  • 檢測(cè)工具
    +關(guān)注

    關(guān)注

    0

    文章

    21

    瀏覽量

    2100
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    #嵌入式軟件設(shè)計(jì) 指針別名

    嵌入式指針嵌入式軟件
    電子技術(shù)那些事兒
    發(fā)布于 :2022年09月02日 23:25:02

    嵌入式軟件工程師的內(nèi)功修煉

    應(yīng)用設(shè)計(jì)師(裸機(jī)或操作系統(tǒng)移植調(diào)度驅(qū)動(dòng)API按照一定的算法邏輯實(shí)現(xiàn)相應(yīng)的需求功能),嵌入式算法設(shè)計(jì)師(把相關(guān)數(shù)學(xué)算法設(shè)計(jì)成軟件程序精準(zhǔn)優(yōu)化系統(tǒng)功能,如PID控算、卡爾曼濾波算法、低通濾波等)。C語言就是
    發(fā)表于 11-03 15:33

    嵌入式軟件測(cè)試的秘訣

    嵌入式軟件測(cè)試的秘訣:1、懂的使用工具;2、盡早發(fā)現(xiàn)內(nèi)存問題(指針越界,數(shù)據(jù)類型超限等);3、深入理解代碼優(yōu)化;4、重現(xiàn)并隔離問題;5、確定測(cè)試的完整性;6、利用初學(xué)者的思維,去發(fā)現(xiàn)問
    發(fā)表于 10-27 07:38

    嵌入式軟件是如何運(yùn)行的?

    1. 上電復(fù)位、板級(jí)初始化階段? 嵌入式系統(tǒng)上電復(fù)位后完成板級(jí)初始化工作。? 板級(jí)初始化程序具有完全的硬件特性,一般采用匯編語言實(shí)現(xiàn)。不同的嵌入式系統(tǒng),板級(jí)初始化時(shí)要完成的工作具有一定的特殊性,但
    發(fā)表于 10-28 09:14

    嵌入式系統(tǒng)內(nèi)存優(yōu)化使用

    響應(yīng)運(yùn)行。并且經(jīng)過實(shí)踐證明,嵌入式系統(tǒng)內(nèi)存優(yōu)化使用,能夠提升系統(tǒng)空間5%內(nèi)存,確保系統(tǒng)順利運(yùn)行。【關(guān)鍵詞】 嵌入式 Linux系統(tǒng) 內(nèi)存優(yōu)化
    發(fā)表于 11-04 06:23

    分享一些嵌入式系統(tǒng)編程中內(nèi)存操作相關(guān)的避坑指南

    嵌入式系統(tǒng)的編程中,內(nèi)存操作是我們常用到的,但往往也是易錯(cuò)的地方,怎么避免呢,今天給大家分享一些相關(guān)的避坑指南。數(shù)據(jù)指針...
    發(fā)表于 12-17 07:18

    嵌入式指針相關(guān)資料分享

    一:嵌入式指針(embedded pointer) (1.1)嵌入式指針概念 一般應(yīng)用在內(nèi)存相關(guān)
    發(fā)表于 12-20 07:11

    使用后嵌入式指針的方法

    通過嵌入式指針,進(jìn)行改進(jìn),提高效率#include#includeusing namespace std;namespace myf{//嵌入式指針class B{private: i
    發(fā)表于 12-20 06:06

    嵌入式Web訪問時(shí)的內(nèi)存丟失問題

    嵌入式Web訪問時(shí)的內(nèi)存丟失問題 由于嵌入式技術(shù)的發(fā)展,嵌入式Web服務(wù)器軟件越來越大,對(duì)硬件的要求也相應(yīng)地提高,但在工業(yè)現(xiàn)場(chǎng)的底層控制中
    發(fā)表于 11-20 09:41 ?651次閱讀
    <b class='flag-5'>嵌入式</b>Web訪問時(shí)的<b class='flag-5'>內(nèi)存</b>丟失問題

    嵌入式軟件是什么意思_嵌入式軟件的分類有哪些

    本文首先闡述了嵌入式軟件的概念,其次介紹了嵌入式軟件的特征,最后介紹了嵌入式軟件的分類。
    發(fā)表于 08-31 15:54 ?1.6w次閱讀

    嵌入式軟件的開發(fā)流程_嵌入式軟件的調(diào)試

    本文首先介紹了嵌入式軟件的發(fā)展,其次闡述了嵌入式軟件的開發(fā)流程,最后介紹了嵌入式軟件的調(diào)試。
    發(fā)表于 08-31 16:02 ?6451次閱讀

    嵌入式系統(tǒng)的內(nèi)存指針操作

    到處理器的內(nèi)存空間中。在x86系統(tǒng)中,分為內(nèi)存和I/O映射兩種內(nèi)存;在ARM體系中,全部的地址都在32位的內(nèi)存空間中,所有的操作都是對(duì)32位地址空間
    的頭像 發(fā)表于 08-27 11:33 ?6422次閱讀

    嵌入式軟件測(cè)試總結(jié)

    嵌入式軟件測(cè)試的秘訣:1、懂的使用工具;2、盡早發(fā)現(xiàn)內(nèi)存問題(指針越界,數(shù)據(jù)類型超限等);3、深入理解代碼優(yōu)化;4、重現(xiàn)并隔離問題;5、確定測(cè)試的完整性;6、利用初學(xué)者的思維,去發(fā)現(xiàn)問
    發(fā)表于 10-20 19:21 ?2次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>測(cè)試總結(jié)

    嵌入式技能樹】

    程師嵌入式硬件工程師通用技能樹軟件C/C++語言編程經(jīng)驗(yàn)、編程能力、應(yīng)用開發(fā)、OOP面向?qū)ο缶幊谭绞健?b class='flag-5'>軟件框架、C指針、文件IO、進(jìn)程線程、高級(jí)IO、對(duì)C++中的智能
    發(fā)表于 10-21 10:21 ?16次下載
    【<b class='flag-5'>嵌入式</b>技能樹】

    嵌入式軟件概述及相關(guān)測(cè)試特點(diǎn)

    概述:什么是嵌入式軟件?與傳統(tǒng)軟件不同,嵌入式軟件需要將軟件分析、設(shè)計(jì)、編碼后燒錄至硬件環(huán)境中才
    發(fā)表于 10-21 11:36 ?13次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>概述及<b class='flag-5'>相關(guān)</b>測(cè)試特點(diǎn)
    主站蜘蛛池模板: 久久国产高清字幕中文 | 国产亚洲新品一区二区 | 天天躁夜夜 | 日本黄色大片在线播放视频免费观看 | 全国男人天堂网 | 你懂得在线播放 | 亚洲欧美在线一区 | 在线观看视频播放 | 思思99re66在线精品免费观看 | 深夜桃色影院 | 免费爱爱网站 | 色中文字幕 | 午夜免费观看_视频在线观看 | 午夜精品久久久久久91 | 91精品国产色综合久久不卡蜜 | 99色婷婷| 日本免费不卡视频一区二区三区 | 真实一级一级一片免费视频 | 色天天综合网色鬼综合 | 福利天堂| 一区二区三区四区在线观看视频 | 国产va在线播放 | 色视频在线观看在线播放 | 国产一区二区在线不卡 | 色综合久久久久久久久久久 | 精品卡1卡2卡三卡免费视频 | 久久亚洲一级毛片 | 国产成人优优影院 | 色综合天天综合中文网 | 日本不卡在线观看 | 在线观看视频一区二区三区 | 污视频日本 | 天天摸天天爽天天澡视频 | 免费又爽又黄禁片视频在线播放 | 狠狠色综合网站久久久久久久 | 天天艹 | 色噜噜狠狠狠狠色综合久 | αv天堂 | 免费看成年视频网页 | 国产一区二区高清 | 西西人体44rt高清午夜 |