iOS入門(十二)動態記憶體分配

2021-07-04 12:06:34 字數 2391 閱讀 3798

棧  

由編譯器自動分配和釋放,在函式體中定義的變數通常在棧上,先進後出,  

從高向低分配。 

堆  

一般由程式設計師分配和釋放  

從低向高分配。一些分配記憶體的函式。

全域性區(靜態區) 初始化的全域性變數和靜態變數在一塊區域,未初始化的全域性變數和靜態變數在相鄰的另外一塊區域。

常量區 

程式**區  

函式被呼叫時會從**區取出,需要的引數以及函式體中的變數,會在棧中臨時分配,函式結束時, 變數會被釋放。

malloc  

向系統申請分配  

記憶體空間  

eg : char * str = malloc(8)  

char 

*str = 

malloc(8 

*  sizeof(char)) ;

釋放堆記憶體  

:  free (  

) ; 不清除內容。

calloc  

void *calloc(unsigned n , unsigned size ) ;

分配n個size 大小的空間。

realloc  

void * realloc( void *p ;unsigned newsize ) ;

按新的長度重新分配記憶體。

memset  

void *memset (void *s , int c , size_t n ) ;

s開始長度為n 的所有位元組賦值為c 。

通常用於結構體和陣列的資料清除。

memcpy  

void *memcpy ( void *dest , const void * source , size _t n ) ;

從source 拷貝n個位元組到dest 中。

memcmp  

int memcmp ( const void * buf1, const void * buf2 , unsigned int count ) ;

1、輸⼊入⼀乙個陣列長度,動態建立數 組,所有元素隨機⽣生成,輸出元素中 的最⼤大值。

2、有⼀一段⽂文字,將⽂文字中的所有單 詞,存放到⼀乙個字串陣列中。

void put10 (int * array , int count  )

int *p = array ;

for ( int i = 0 ;  i < count  ;  i ++ )

printf( "\n");

void get10 ( int * array , int count  )

int * p = array ;

for ( int i = 0 ;  i < count  ;  i ++ )

void dealarray ( int * array , int count  )

int * max = array ;

int * min  = array;

int *p = array;

for ( int i = 0 ;  i < count ;  i ++ )

p ++ ;

}swap(min, array);

for (int i = 0 ;  i < count ;  i ++ )

p ++ ;

}swap(max, array+count -1);

void swap ( int * a , int * b )

int temp = * a ;

*a = *b ;

*b = temp ;

//  int array[10] = ;

//  get10(array, 10);

//  dealarray(array, 10);

//  put10(array, 10);

void put10 (int * array , int count  )

printf( "\n"); }

void get10 ( int * array , int count  )

}void dealarray ( int * array , int count  )

p ++ ;

} swap(min, array);

for (int i = 0 ;  i < count ;  i ++ )

p ++ ;

} swap(max, array+count -1); }

void swap ( int * a , int * b )

void changearr(int *array, int count )

*array = *array / *array ; }

void chan(int * array , int count )

}

動態記憶體分配

在c 中建立乙個物件時,我們必須要為這個物件申請一塊記憶體,而且要用建構函式對這塊記憶體進行初始化。c 中的new和delete相對於c的庫函式malloc和free在這方面有很大的優勢,所以我們主要講的是運算子new和delete。當用new來建立乙個物件時,它會自動在堆裡為物件分配記憶體並且為這...

動態記憶體分配

為什麼使用動態記憶體分配?c語言中的一切操作都是基於記憶體的 變數和陣列都是記憶體的別名,如何分配這些記憶體由編譯器在編譯期間決定 定義陣列的時候必須指定陣列唱的 而陣列長度是在編譯期就必須決定的 需求 程式執行的過程中,可能需要使用一些額外的記憶體空間 malloc和free malloc和fre...

動態記憶體分配

c的儲存類別有4種 自動的 auto 靜態的 statics 暫存器的 register 外部的 extern 全域性變數時分配在記憶體中的靜態儲存區 靜態區域性變數屬於靜態儲存類別,在靜態儲存區內分配儲存單元,是在編譯時賦初值的,只賦初值一次,在程式執行時它已有初值,以後每次呼叫函式時不再重新賦初...