動態記憶體分配
1.記憶體劃分
棧區:儲存區域性變數和函式引數(遵守先進後出規則。)
char *func(){
char string[ ] = “iphone”;
//此處是把常量區的字串 “iphone” 拷貝到棧記憶體中
return string;//棧記憶體 返回是不安全的 禁止
}
常量區:整型常量,字元常量 ,字串常量等 ( 常量佔用記憶體,只讀狀態,不可修改)
const修飾 const int a = 2;
靜態區(全域性區):static int a = 5;(變數之前加 static ,該變數會儲存在靜態區)
注意:
①只初始化一次,
②若初始化沒給值,預設值為0
③只有程式退出才釋放(永久佔用記憶體)
④全域性變數儲存在靜態區(花括號外面定義的變數)
堆區:malloc 等記憶體分配函式分配的記憶體(手動分配,手動釋放)
程式碼區:程式碼在編譯後轉換成二進位制存放的區域
2.動態記憶體分配
malloc的使用:
int *a = malloc(8);
Stu *b = malloc(sizeof(Stu)*5 );
記憶體釋放:
void free(void *)
3.其他記憶體分配函式
calloc:
void * calloc(unsigned n ,unsigned size);//分配n個size大小的空間,並清零
realloc:
void * realloc(void *p,unsigned newSize);//按給定的地址以及給定的大小分配記憶體
4.記憶體操作函式
初始化記憶體:
void *memset(void *s,int cmsize_t n);//從s指向的記憶體開始初始化n個位元組的內容為 c;
記憶體拷貝:
void memcpy(void *dest,const void *sourse,size_t n);//從source指向的記憶體開始拷貝到 dest ,拷貝n個位元組
記憶體比較:
int memcmp(const void *buf1,const *buf2,unsigned int count);//比較buf1和buf2指向的記憶體是否相等,比較count個位元組
相關文章
- C++ 動態記憶體分配C++記憶體
- 動態分配記憶體地址(.NET)記憶體
- C++動態記憶體分配C++記憶體
- 簡單理解動態記憶體分配和靜態記憶體分配的區別記憶體
- C語言(動態記憶體分配)C語言記憶體
- C++ 動態記憶體分配與名稱空間C++記憶體
- Pytorch視訊記憶體動態分配規律探索PyTorch記憶體
- C語言malloc()函式:動態分配記憶體空間C語言函式記憶體
- 記憶體動態分配與釋放,malloc和new區別記憶體
- 智慧指標的模板,用來管理動態分配的記憶體指標記憶體
- JavaScript記憶體分配JavaScript記憶體
- JVM記憶體分配JVM記憶體
- java記憶體分配Java記憶體
- 二維陣列的動態記憶體分配和釋放 (轉)陣列記憶體
- 垃圾收集器與記憶體分配策略_記憶體分配策略記憶體
- 動態記憶體管理記憶體
- JVM 記憶體模型 記憶體分配,JVM鎖JVM記憶體模型
- 探索iOS記憶體分配iOS記憶體
- Java 記憶體分配策略Java記憶體
- java jvm 記憶體分配JavaJVM記憶體
- [C++]記憶體分配C++記憶體
- 【S13】vector和string優先於動態分配的記憶體記憶體
- c語言野指標與結構體指標動態記憶體分配小解C語言指標結構體記憶體
- Memcache 記憶體分配策略和效能(使用)狀態檢查記憶體
- 記憶體的分配與釋放,記憶體洩漏記憶體
- C語言-記憶體管理之一[記憶體分配]C語言記憶體
- java基礎-記憶體分配Java記憶體
- C語言-記憶體分配C語言記憶體
- java-方法記憶體分配Java記憶體
- go記憶體分配器Go記憶體
- Java 堆疊記憶體分配Java記憶體
- 記憶體分配策略學習記憶體
- 記憶體分配的確定記憶體
- weblogic的記憶體分配Web記憶體
- 記憶體分配方式 (轉)記憶體
- vector 避免記憶體頻繁分配釋放與手動釋放vector記憶體記憶體
- 動態代理的記憶體分析記憶體
- hadoop 記憶體分配規則Hadoop記憶體