当前位置:天才代写 > tutorial > C语言/C++ 教程 > c编程中的堆与栈

c编程中的堆与栈

2017-11-01 08:00 星期三 所属: C语言/C++ 教程 浏览:53

栈与系统的设计有关,由系统来打点。不外,措施员可以通过如new malloc语句在堆中获取内存。

栈是向下发展的一块持续的内存区域。栈的巨细是系统配置好的。堆是向上发展,不持续的内存区域。因为操纵系统是用链表来打点内存的。

堆的巨细受系统有效虚拟内存的限制。

栈: 在函数挪用时,第一个进栈的是主函数中函数挪用后的下一条指令的地点,然后是函数的各个参数,留意静态变量是不入栈的。当本次函数挪用竣事后,局部变量先出栈,

然后是参数,最后栈顶指针指向最开始存的地点,也就是主函数中的下一条指令,措施由该点继承运行。

堆:堆中的详细内容有措施员布置。

一般举例

int a = 0; 全局初始化区
    
char *p1; 全局未初始化区
    
main()
    
{
    
int b; 栈
    
char s[] = "abc"; 栈
    
char *p2; 栈
    
char *p3 = "123456"; 123456\0在常量区,p3在栈上。
    
static int c =0; 全局(静态)初始化区
    
p1 = (char *)malloc(10); 堆
    
p2 = (char *)malloc(20); 堆
    
}
    
     
    
     
    
int main(){
    
char *p1="helloworld";
    
char *p2="helloworld";
    
char p3[]="helloworld";
    
char p4[]="helloworld";
    
printf("0x%08x\n",p1);
    
printf("0x%08x\n",p2);
    
printf("0x%08x\n",p3);
    
printf("0x%08x\n",p4);
    
}
    
输出功效:
    
[email protected]:~$ ./a.out
    
0x0040072c
    
0x0040072c
    
0xc3340450
    
0xc3340460

因为指针p1,p2所指向的数据存储在常量区域,又因它们是数值沟通,所以p1,p2的值是沟通的。

p3,p4固然内容沟通,可是它们是栈上的字符数组所有地点是差异。

From:csdn博客 muge0913

 

    关键字:


天才代写-代写联系方式