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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言怎么建立內存的動態(tài)分配

jf_78858299 ? 來源:C語言 ? 作者:閆小林 ? 2023-03-10 15:30 ? 次閱讀

C語言內存動態(tài)分配

在C語言中,全局變量是分配在內存中的靜態(tài)存儲區(qū)的,非靜態(tài)的局部變量,包括形參是分配在內存中的動態(tài)存儲區(qū)的,這個存儲區(qū)是一個“?!钡膮^(qū)域。

C語言允許建立內存動態(tài)分配區(qū)域,以存放一些臨時用的數(shù)據(jù),這些數(shù)據(jù)不必在程序的聲明部分定義,也不必等到函數(shù)結束時才釋放,而是需要時隨時開辟,不需要時隨時釋放。這些數(shù)據(jù)是臨時存放在一個特別的自由存儲區(qū),稱為“堆”。

C語言怎么建立內存的動態(tài)分配

malloc函數(shù)

函數(shù)原型
void *malloc(unsigned int size);

其作用是在內存的動態(tài)存儲區(qū)分配一個長度為size的連續(xù)空間。形參size的類型定為無符號整型。此函數(shù)是一個指針型函數(shù),返回的指針指向該分配域的開頭位置。

calloc函數(shù)

函數(shù)原型

void *calloc(unsigned n,unsigned size);

其作用是在內存的動態(tài)存儲區(qū)中分配n個長度為size的連續(xù)空間,這個空間一般比較大,足以保存一個數(shù)組。

free函數(shù)

函數(shù)原型

void free(void *p);

其作用是釋放指針變量p所指向的動態(tài)空間,使這部分空間能重新被其他變量使用。

realloc函數(shù)

函數(shù)原型

void *realloc(void *p,unsigned int size);

如果已經通過malloc函數(shù)或者calloc函數(shù)獲得了動態(tài)空間,想改變其大小,可以用realloc函數(shù)重新分配。

C99標準把意思malloc、calloc、realloc函數(shù)的基類型定為void類型,這種指針稱為無類型指針。

C語言void指針類型

指向void類型應該理解為指向空類型或者不指向確定的類型的數(shù)據(jù)。

把void指針賦值給不同基類型的指針變量時,編譯系統(tǒng)會自動進行轉換,不必用戶自己進行強制轉換。

內存的動態(tài)分配主要應用于建立程序中的動態(tài)數(shù)據(jù)結構中。

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

    關注

    8

    文章

    3042

    瀏覽量

    74179
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137257
  • 指針
    +關注

    關注

    1

    文章

    480

    瀏覽量

    70585
收藏 人收藏

    評論

    相關推薦

    FreeRTOS內存動態(tài)分配嗎?

    你可能會好奇:FreeRTOS可以創(chuàng)建任務,也可以刪除任務,它是動態(tài)分配內存嗎?
    的頭像 發(fā)表于 03-24 09:55 ?2234次閱讀
    FreeRTOS<b class='flag-5'>內存</b>是<b class='flag-5'>動態(tài)分配</b>嗎?

    C語言知識總結:動態(tài)內存分配

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

    C語言既然可以自動為變量分配內存,為什么還要用動態(tài)分配內存呢?

    不知道大家在學習C語言動態(tài)分配內存的時候有沒有過這樣的疑問,既然系統(tǒng)可以自動幫我們分配內存,為什
    發(fā)表于 12-13 11:14 ?1079次閱讀

    使用C語言實現(xiàn)簡單動態(tài)內存分配

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

    C語言程序設計中動態(tài)內存分配如何實現(xiàn)

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

    怎么在LL2和DDR3上用malloc同時動態(tài)分配內存

    程序中需要用malloc動態(tài)分配兩塊內存,分別在LL2和DDR3上,請問用cmd動態(tài)分配的空間都是在.sysmem里面嗎?怎么在兩塊內存中都動態(tài)
    發(fā)表于 06-21 09:29

    請教關于在堆區(qū)的動態(tài)分配內存問題

    ;]CmplxSgn_t;在定義信號之后會動態(tài)分配一段arrayLen長的內存給ptSignalArray,在信號的使命結束后會把內存釋放掉。但是俺剛接觸dsp不久,有資料說頻繁的申請/釋放
    發(fā)表于 08-07 08:29

    為什么lwip建立TCP客戶端時不動態(tài)分配本地端口?

    最近這兩天,在做EtherNet/IP協(xié)議。STM32作為客戶端,連接遠程服務端。現(xiàn)在遇到一個問題,在建立TCP客戶端時,遠程端口為44818,分配的本地端口一直為49153。按照我對TCP的了解,本地端口應該是動態(tài)分配的,為什
    發(fā)表于 08-29 20:48

    嵌入式C語言動態(tài)內存分配

    memset函數(shù)free內存時,需要把指針變量置為NULL,防止其變?yōu)橐爸羔榤emset(void* Dst, int Val, size_t size)作用:把Dst中大小為size的內容全部由Val替換符合編程規(guī)范的動態(tài)分配內存
    發(fā)表于 12-14 06:37

    請問使用動態(tài)內存分配安全嗎?

    在使用完畢后,需要顯式的釋放之,這就要求程序員對動態(tài)分配內存了然于胸。在非常重視安全(safety-critical)的嵌入式C語言程序開發(fā)中,
    發(fā)表于 12-15 06:10

    使用動態(tài)內存分配安全嗎

    安全嗎?”為了更加安全穩(wěn)定,美國軍方禁止在C語言程序中使用malloc()使用動態(tài)內存分配安全嗎?在C
    發(fā)表于 12-15 07:44

    動態(tài)分配內存知識

    最近學習動態(tài)分配內存 這個程序是我自己編的,呵呵,好有成就感啊... #include stdio.h/*Feng原創(chuàng)...*/ #define N 2 char *GetCity(void
    發(fā)表于 05-28 15:27 ?99次下載

    零矢量動態(tài)分配的-直接轉矩控制

    零矢量動態(tài)分配的-直接轉矩控制
    發(fā)表于 01-21 11:49 ?1次下載

    動態(tài)內存分配的注意事項及本質是什么

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

    51單片機內存動態(tài)分配

    51單片機內存動態(tài)分配序言最近玩51單片機碰到一個問題,51中malloc函數(shù)并不能像在PC上一樣正常運行,這涉及到了內存池的概念。下面就來演示一下如何在單片機上也可正常使用動態(tài)內存
    發(fā)表于 11-12 14:36 ?11次下載
    51單片機<b class='flag-5'>內存</b><b class='flag-5'>動態(tài)分配</b>