一、内存四驱模型
流程说明:
1、运行可执文件时,操作系统将物理硬盘代码load到内存。
2、操作系统把C代码分成四个区:
(1)堆区(heap):一般由程序员分配释放(动态内存申请与释放),若程序员不释放
,则不会析构。
(2)栈区(stack):程序局部变量。 由编译器自动分配释放,存储函数的参数值,局
部变量的值等。程序结束时自动析构。
(3)全局区((静态区static)):有常量和全局变量(操作系统统一管理)
全局变量和静态变量的存储室放在一块的,初始化的全局变量
和静态变量是在一块区域,未初始化的全局变量和未初始化的
静态变量在相邻的另一块区域,该区域在程序结束后由操作系
统释放。
常量区:字符串常量和其他常量的存储位置,程序结束后由操
作系统释放。
(4)代码区(code):存放函数体的二进制代码。
3、操作系统找到main函数入口执行。
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
void main()
{
int a; //栈区
int *p; //栈区
//直接修改变量
a=10;
printf("&a:%d\n",&a);
//间接修改变量(直接对内存标号进行操作)
*( (int *)&a ) = 200; // &a 表示a的地址,(int *)告诉C++编译器按照int类型(4个字节)去操作这块内存。
printf("a:%d\n",a);
//间接赋值 通过指针
p=&a; //把内存标号放在指针p中
*p=300;
printf("a:%d\n",a);
system("pause");
}