可執行檔案組成部分:
1.文字段 唯讀的
2.資料段
1)非初始化資料段 未初始化的全域性變數和靜態變數
2)初始化資料段 初始化的全域性變數和靜態變數
3.棧(stack) 棧空間,向下增長
4.堆(heap) 堆空間,向上增長 malloc、calloc、realloc
棧 由編譯器自動分配釋放管理。
1.區域性變數
2.函式呼叫時返回位址
3.呼叫者的環境資訊(例如某些機器暫存器)
堆 需要程式設計師分配釋放管理,若程式設計師不釋放,程式結束時才由os**。
需要#include
void
*malloc
(size_t
size );
分配size個位元組的記憶體塊。
分配成功則返回指向被分配記憶體的指標,否則返回null。
void
* calloc(
size_t
num, size_t
size );
分配num個size位元組的記憶體空間,分配之後會將儲存塊裡初始化為0值。
分配成功則返回該空間的首位址,否則返回null。
void
*realloc(
void
*ptr, size_t
new_size )
;重新分配記憶體空間,ptr是之前通過動態記憶體分配得到的指標,new_size為重新分配的空間大小。
分配成功則返回指向被分配記憶體的指標,否則返回null。
void free(
void
* ptr );
對同一指標進行兩次free會導致程式崩潰,所以應該
free
(str);
str =
null
;void
*memset
(void
*dest,
intch,
size_t
count );
需要#include
void
bzero(
void
*s,
size_t
n);將記憶體清0,作用同memset
(void
*dest,
0x0,
size_t
count );
c語言動態記憶體分配 C 動態記憶體分配
動態記憶體分配 雖然通過陣列就可以對大量的資料和物件進行有效地管理,但是很多情況下,在程式執行之前,我們並不能確切地知道陣列中會有多少個元素。這種情況下,如果陣列宣告過大,就會造成浪費 宣告過小,就會影響處理。在c 中,動態記憶體分配技術可以保證程式在執行過程中按照需要申請適量記憶體,使用後釋放,從...
C語言動態記憶體分配
c語言動態記憶體分配 動態資料結構可以在執行時靈活新增 刪除或重排資料項。在執行時分配記憶體空間的過程稱為動態記憶體分配。記憶體分配函式如下 malloc 分配所需的位元組大小,並返回指向所分配空間的第乙個位元組的指標 calloc 為元素陣列分配空間,並初始化為零,然後返回指向該記憶體的指標 fr...
C語言 動態記憶體分配
c語言有儲存變數的區域稱之為棧 stack 除此之外 c語言還允許建立自己的動態記憶體區域 以存放一些臨時的資料 這區域稱之為 堆 heap 也就是存放執行時的資料 可以根據程式的需要 向系統申請所需大小的空間 由於未宣告部分定義他們為變數或者陣列因此只能通過指標去訪問 建立記憶體動態分配主要由4個...