首先應該明白物件的三種內部的儲存方式:自動儲存,靜態儲存,和動態儲存。當執行離開當期程式塊的時候,堆疊指標返回到它進入程式塊
之前的地方,有效的銷毀了那個程式塊的自動變數。重新進入這個塊會再次建立所有的自動變數。靜態物件宣告或者在檔案域中。動態物件是存在系統呼叫
的在執行期中建立並且儲存在堆中,這是一種特殊的留給使用者控制的資料區。
下面是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使用...