動態記憶體管理

2021-06-26 17:00:30 字數 1659 閱讀 3326

首先應該明白物件的三種內部的儲存方式:自動儲存,靜態儲存,和動態儲存。當執行離開當期程式塊的時候,堆疊指標返回到它進入程式塊

之前的地方,有效的銷毀了那個程式塊的自動變數。重新進入這個塊會再次建立所有的自動變數。靜態物件宣告或者在檔案域中。動態物件是存在系統呼叫

的在執行期中建立並且儲存在堆中,這是一種特殊的留給使用者控制的資料區。

下面是c++/c中常見的動態記憶體的技術

//在編譯期間並不知道多大空間儲存乙個物件使用堆疊很方便

#include #include #include #include #define maxline 1024

static int scomp(const void*,const void*);

int main(int argc,char**argv){

int i,n;

char*strings[maxline],buf[bufsiz];

if (argc>1)

freopen(argv[1],"r",stdin);

for (n=0;n標頭檔案使用動態分配宣告了4個函式

1.void*malloc(size_t,siz);返回乙個指向siz大小的第乙個位元組的指標通常分配單個物件

2.void*calloc(size_t nelems,size_t elem_size)返回指向nelems*elem_size位元組的指標通常分配物件陣列

3.void*realloc(void*ptr,size_t siz);用於擴充套件或者縮小堆疊的分配ptr必須源於上次malloc,calloc或者realloc呼叫

4.void free(void*ptr)使用以前分配的堆疊記憶體去可以重用

#include //返回乙個指標指向動態分配大小的。字串的參差陣列

extern char**arglist(int ,char**,int*);

extern void free_arglist(int ,char**);

int main(int argc,char**argv){

int i,nargs;

char**args = arglist(--argc,++argv,&nargs);

for (i=0;i從檔案遞迴的讀取引數

//從檔案遞迴的讀取引數

#include #include #include #include #define chunk 10 //重新分配的數量

static char**args;//引數列表

static int nleft;//不同的引數位置

static int nargs;//引數的數量

//私有函式

//用於處理間接檔案引數

static void expand(file*f);

static void add(char*arg);

char**arglist(int old_nargs,char** old_args,int* new_nargs){

int i;

//最初的分配

args = (char**)calloc(old_nargs,sizeof(char*));//分配字串陣列

assert(args);

nleft = old_nargs;

nargs = 0;

//處理每個命令列引數

for (i=0;i

動態 記憶體管理

定義變數時,必須制定其資料型別和名字。而動態建立物件時,只需指定其資料型別,而不必為該物件命名。取而代之的是,new表示式返回指向新建立物件的指標,我們通過該指標來訪問此物件。int i int pi new int 這個new表示式在自由儲存區中分配建立了乙個整型物件,並返回此物件的位址,並用該位...

動態記憶體管理

c語言使用malloc calloc realloc free進行動態記憶體管理。void test c 通過new和delete動態管理記憶體。new delete動態管理物件。new delete動態管理物件陣列。void test void test int globalvar 1 stati...

動態記憶體管理

1 malloc free和new delete之間關係和差異。共同點 他們都是動態管理記憶體的入口 不同點 1 malloc free是c c 的標準庫函式,而 new delete是c 操作符 2 malloc free使用時要自己對於型別大小進行計算,返回值為void new delete使用...