c中内存
电流高电位:1
低电位:0
1字节=8二进制位
32bit最大4G内存
地址总线32位,也就是寻址空间是32位
32位指:给内存的编号只能编到32个二进制位
32根地址总线 每一根有0,1两种状态,32根就有2^32种状态
2^32=2^10*2^10*2^10*2^2=1014*1024*1024*4字节=1024*1024*4k=1024*4M=4G
操作系统
给内存做编号
给内存做一定规划
在64位操作系统里
认为程序员使用的内存只要前面48位就Ok了
49到64位由操作系统使用

全局变量,常量在数据段
绿色区域是动态可分配的内存
1 #include <stdio.h> 2 int global=0; 3 4 int rect(int a,int b){ 5 static int count=0; 6 count++; 7 global++; 8 int s=a*b; 9 return s; 10 } 11 12 int quadrate(int a){ 13 static int count=0; 14 count++; 15 global++; 16 int s=rect(a,a); 17 return s; 18 } 19 20 int main(){ 21 int a=3; 22 int b=4; 23 int *pa=&a; 24 int *pb=&b; 25 int *pglobal=&global; 26 int (*pquadrate)(int a)=&quadrate; 27 int s=quadrate(a); 28 printf("%d\n", s); 29 }
gcc -g p.c -o p
gdb ./p (gdb) p rect $7 = {int (int, int)} 0x4004c4 <rect> (gdb) p &rect $8 = (int (*)(int, int)) 0x4004c4 <rect> (gdb) p rect(2,3) $9 = 6 (gdb) p rect==&rect $10 = 1 gdb) p *rect $17 = {int (int, int)} 0x4004c4 <rect> (gdb) p rect==*rect $18 = 1
#include <stdio.h> int main(){ int a=3; int b=2; int array[2]; array[0]=1; array[1]=10; array[2]=100; int *p=&a; int i; for(i=0;i<6;i++){ printf("*p=%d\n",*p); p++; } printf("-----------------------------\n" ); p=&a; for(i=0;i<6;i++){ printf("*p[%d]=%d\n",i,p[i]); } }

浙公网安备 33010602011771号