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

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

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

C語言動(dòng)態(tài)內(nèi)存分配分析

GReq_mcu168 ? 來源:cg ? 2019-01-07 11:02 ? 次閱讀

一:傳統(tǒng)數(shù)組(靜態(tài)數(shù)組)的缺點(diǎn)

1:數(shù)組的長度必須事先指定,并且是常整數(shù),不能是變量 int a[5];2:傳統(tǒng)數(shù)組程序員無法由程序員釋放,只能由系統(tǒng)釋放。(并且只能在數(shù)組所在函數(shù)結(jié)束才能釋放)3:數(shù)組的長度在函數(shù)運(yùn)行期間不能動(dòng)態(tài)的擴(kuò)充和縮小4:A函數(shù)定義的傳統(tǒng)數(shù)組,在A函數(shù)結(jié)束時(shí),在B函數(shù)中是不能使用的,因?yàn)橐呀?jīng)釋放。也就是傳統(tǒng)數(shù)組不能跨函數(shù)。

區(qū)分:靜態(tài)存儲(chǔ)與內(nèi)存的靜態(tài)開辟

二:為什么要?jiǎng)討B(tài)分配內(nèi)存

用來解決傳統(tǒng)數(shù)組的四個(gè)缺陷

三:動(dòng)態(tài)內(nèi)存分配舉例,以及動(dòng)態(tài)數(shù)組的構(gòu)造

方式:malloc函數(shù),在堆開辟空間

1:malloc是由程序員在堆棧動(dòng)態(tài)開辟空間2:返回值開辟空間的首地址,但是類型是void *,需要強(qiáng)制類型轉(zhuǎn)換3:分配的內(nèi)存空間應(yīng)該能整除類型所占的字節(jié)數(shù)4:包含頭文件malloc.h5:只能用free(p)來釋放p所指向的動(dòng)態(tài)開辟的內(nèi)存空間。6:對(duì)動(dòng)態(tài)內(nèi)存空間的操作,用*p來操作。7:可以用多個(gè)指針指向這個(gè)動(dòng)態(tài)空間8:當(dāng)有多個(gè)指針只向這個(gè)動(dòng)態(tài)空間時(shí),只能用free一個(gè)指針,多次重復(fù)釋放要被報(bào)錯(cuò)9:可以將動(dòng)態(tài)開辟的的內(nèi)存指針作為函數(shù)參數(shù)

問題:p的分配類型是動(dòng)態(tài)的還是靜態(tài)的?當(dāng)調(diào)用free(p)后,p的內(nèi)存空間會(huì)被釋放么?例子:動(dòng)態(tài)構(gòu)建一個(gè)一維數(shù)組:

動(dòng)態(tài)擴(kuò)充數(shù)組的長度,也就是在程序運(yùn)行時(shí)動(dòng)態(tài)擴(kuò)充:realloc(首地址,總共字節(jié)數(shù))

作用:將原來動(dòng)態(tài)開辟的動(dòng)態(tài)內(nèi)存重新開辟一個(gè)字節(jié)數(shù),如果這個(gè)數(shù)比以前的大,前面的數(shù)據(jù)保存。如果比原來的小,保留前面的數(shù)據(jù)。

注意:擴(kuò)充或者縮放的內(nèi)存單元是新開辟的內(nèi)存單元。這個(gè)過程中有值的拷貝過程。返回值是新開辟的地址空間首地址。

四:靜態(tài)內(nèi)存和動(dòng)態(tài)內(nèi)存的比較

靜態(tài)開辟的內(nèi)存:在棧中開辟,由編譯器分配,由系統(tǒng)自動(dòng)釋放動(dòng)態(tài)開辟的內(nèi)存:在堆中開辟,由程序員開辟,由程序員自動(dòng)釋放。

五:跨函數(shù)使用內(nèi)存的問題

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

    關(guān)注

    8

    文章

    2902

    瀏覽量

    73534
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7575

    瀏覽量

    134022

原文標(biāo)題:詳解 C語言動(dòng)態(tài)內(nèi)存分配

文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    動(dòng)態(tài)內(nèi)存管理模塊的設(shè)計(jì)原理與實(shí)現(xiàn)

    Fense 通過設(shè)立一個(gè)雙向鏈表(struct Head *stHead)來保存所有被分配動(dòng)態(tài)內(nèi)存塊的信息。鏈表中的每個(gè)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)動(dòng)態(tài)內(nèi)存塊,節(jié)點(diǎn)中包括此內(nèi)存大小、
    的頭像 發(fā)表于 06-30 08:05 ?2267次閱讀
    <b class='flag-5'>動(dòng)態(tài)內(nèi)存</b>管理模塊的設(shè)計(jì)原理與實(shí)現(xiàn)

    C語言知識(shí)總結(jié):動(dòng)態(tài)內(nèi)存分配

    動(dòng)態(tài)內(nèi)存分配就 是指在程序執(zhí)行的過程中動(dòng)態(tài)分配或者回收存儲(chǔ)空間的分配內(nèi)存的方法。
    發(fā)表于 10-24 15:52 ?772次閱讀

    使用C語言實(shí)現(xiàn)簡單動(dòng)態(tài)內(nèi)存分配

    首先要明白為何需要動(dòng)態(tài)內(nèi)存分配,熟悉C語言的讀者應(yīng)該對(duì)這個(gè)比較熟悉,需要一段內(nèi)存時(shí)會(huì)使用malloc函數(shù)來申請所需要大小的
    發(fā)表于 07-28 16:26 ?538次閱讀
    使用<b class='flag-5'>C</b><b class='flag-5'>語言</b>實(shí)現(xiàn)簡單<b class='flag-5'>動(dòng)態(tài)內(nèi)存</b><b class='flag-5'>分配</b>

    C語言程序設(shè)計(jì)中動(dòng)態(tài)內(nèi)存分配如何實(shí)現(xiàn)

    C語言程序設(shè)計(jì)中,動(dòng)態(tài)內(nèi)存分配如何實(shí)現(xiàn),需要注意哪些問題?
    發(fā)表于 09-28 16:53 ?1136次閱讀

    內(nèi)存動(dòng)態(tài)內(nèi)存分配實(shí)現(xiàn)

    第27章 STM32H7的TCM,SRAM等五塊內(nèi)存動(dòng)態(tài)內(nèi)存分配實(shí)現(xiàn)本章教程為大家分享一種DTCM,SRAM1,SRAM2,SRAM3和SRAM4可以獨(dú)立管理的動(dòng)態(tài)內(nèi)存管理方案,在實(shí)
    發(fā)表于 08-03 07:14

    嵌入式C語言動(dòng)態(tài)內(nèi)存分配

    動(dòng)態(tài)內(nèi)存分配:1、malloc、memset、free在日常寫代碼時(shí)需要注意以下幾點(diǎn):malloc分配內(nèi)存時(shí),需要 if語句 判斷malloc是否成功
    發(fā)表于 12-14 06:37

    請問使用動(dòng)態(tài)內(nèi)存分配安全嗎?

    想在C語言程序員之間開始一個(gè)激烈的,或者說有爭議的討論很簡單,只需要問:“使用動(dòng)態(tài)內(nèi)存分配安全嗎?”使用動(dòng)態(tài)內(nèi)存
    發(fā)表于 12-15 06:10

    使用動(dòng)態(tài)內(nèi)存分配安全嗎

    [導(dǎo)讀]想在C語言程序員之間開始一個(gè)激烈的,或者說有爭議的討論很簡單,只需要問:“使用動(dòng)態(tài)內(nèi)存分配安全嗎?”想在C
    發(fā)表于 12-15 07:44

    動(dòng)態(tài)內(nèi)存分配是什么意思

    所謂動(dòng)態(tài)內(nèi)存分配(Dynamic Memory Allocation)就是指在程序執(zhí)行的過程中動(dòng)態(tài)分配或者回收存儲(chǔ)空間的分配
    發(fā)表于 12-17 08:17

    RTThread的動(dòng)態(tài)內(nèi)存空間該如何去分配

    關(guān)于rtt的動(dòng)態(tài)內(nèi)存空間分配,想問一下以下我的幾點(diǎn)理解是對(duì)的嗎1、我看RTT NANO和MASTER版本的動(dòng)態(tài)內(nèi)存分配好像不太一樣,我的理解是MASTER版本的
    發(fā)表于 08-31 14:34

    靜、動(dòng)態(tài)內(nèi)存的優(yōu)劣比較

    動(dòng)態(tài)內(nèi)存分配不像數(shù)組等靜態(tài)內(nèi)存分配方法那樣需要預(yù)先分配存儲(chǔ)空間,而是由系統(tǒng)根據(jù)程序的需要即時(shí)分配
    的頭像 發(fā)表于 08-06 18:25 ?6442次閱讀

    嵌入式C語言中的動(dòng)態(tài)內(nèi)存管理和動(dòng)態(tài)內(nèi)存分配

    動(dòng)態(tài)內(nèi)存管理同時(shí)還具有一個(gè)優(yōu)點(diǎn):當(dāng)程序在具有更多內(nèi)存的系統(tǒng)上需要處理更多數(shù)據(jù)時(shí),不需要重寫程序。
    發(fā)表于 08-15 17:16 ?2149次閱讀

    動(dòng)態(tài)內(nèi)存分配的注意事項(xiàng)及本質(zhì)是什么

    C語言中比較重要的就是指針,它可以用來鏈表操作,談到鏈表,很多時(shí)候?yàn)榇?b class='flag-5'>分配內(nèi)存采用動(dòng)態(tài)分配而不是靜態(tài)分配
    的頭像 發(fā)表于 10-13 15:37 ?3338次閱讀
    <b class='flag-5'>動(dòng)態(tài)內(nèi)存</b><b class='flag-5'>分配</b>的注意事項(xiàng)及本質(zhì)是什么

    C語言怎么建立內(nèi)存動(dòng)態(tài)分配

    C語言中,全局變量是分配在內(nèi)存中的靜態(tài)存儲(chǔ)區(qū)的,非靜態(tài)的局部變量,包括形參是分配在內(nèi)存中的動(dòng)態(tài)存儲(chǔ)區(qū)的,這個(gè)存儲(chǔ)區(qū)是一個(gè)“?!钡膮^(qū)域。
    的頭像 發(fā)表于 03-10 15:30 ?760次閱讀

    C語言中的動(dòng)態(tài)內(nèi)存管理講解

    本章將講解 C 中的動(dòng)態(tài)內(nèi)存管理。C 語言內(nèi)存分配和管理提供了幾個(gè)函數(shù)。這些函數(shù)可以在
    的頭像 發(fā)表于 02-23 14:03 ?310次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>中的<b class='flag-5'>動(dòng)態(tài)內(nèi)存</b>管理講解