目录
1 作用域
// 代码块作用域
{
int a = 10;
}
2 内存分区
程序所需要的内存:代码区(只读区)、数据区(可读可写区)。
数据区:栈区、堆区、全局/静态区、字符串常量区
1 栈区:自动申请、自动释放; 如:函数、函数局部变量;可读可写;
2 堆区:手动申请内存,手动释放内存;----------------------
3 全局/静态区:全局变量,静态全局变量,静态局部变量;程序运行前创建,结束后释放;可读可写
4 字符串常量区:“str” 程序运行前创建,结束后释放;只读;
堆区:根据需要申请内存大小,在合适的时间释放内存!!
malloc
// 返回申请内存的首地址
void *malloc(size_t size)
free
// 释放内存
void *free(void *_Memory)
申请四个字节
#include <stdio.h>
#include <stdlib.h>
void mallocDouble()
{
// 堆上分配8字节 double,返回首地址
double *db = (double *)malloc(sizeof(double));
// write
*db = 3.14;
printf("*db = %lf \n", *db);
// free
free(db);
}
int main(int argc, char *argv[])
{
// [1] 申请4个字节,防止4个字节内存的首地址
// 把(void*) 转为 (int *)
int *num = (int *)malloc(4);
*num = 18;
printf("[VALUE] *num = %d ", *num);
// [2] 释放内存
free(num);
return 0;
}
不同类型分配
// [1] 整形
int g_a = 100; // 全局区
void mallocInt()
{
int a = 10; // 栈区
static int b = 10; // 静态区
// 堆上分配8字节 double,返回首地址
double *db = (double *)malloc(sizeof(double));
// write
*db = 3.14;
printf("*db = %lf \n", *db);
// free
free(db);
}
内存的申请与管理
// [1] 整形
int g_a = 100; // 全局区
void mallocInt</