正在加载图片...
分配,但是栈的动态分配和堆是不同的,他的动态分配是由编译器进行释放,无需我们手工 实现。 6、分配效率不同:栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专 门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆 则是C/C+函数库提供的,它的机制较复杂,效率比栈要低。 从上面可以看到,我们尽量用栈,而不是用堆。但是由于栈和堆相比不是那么灵活,有 时候分配大量的内存空间,还是用堆好一些。 无论是堆还是栈,都要防止越界现象的发生,因为越界的结果要么是程序崩溃,要么是 摧毁程序的堆、栈结构,产生意想不到的结果。 一个例子: inta=8;/全局区 main() intb;/栈 char s[]="abc";/栈 char*p1;/栈 char*p2="123456";/123456在常量区,p2在栈上。 static int c=0:/全局(静态)区 p1=(char*)mal1oc(10);/堆区 strcpy(p1,"123456");/123456在常量区 2 分配,但是栈的动态分配和堆是不同的,他的动态分配是由编译器进行释放,无需我们手工 实现。 6、分配效率不同:栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专 门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆 则是 C/C++函数库提供的,它的机制较复杂,效率比栈要低。 从上面可以看到,我们尽量用栈,而不是用堆。但是由于栈和堆相比不是那么灵活,有 时候分配大量的内存空间,还是用堆好一些。 无论是堆还是栈,都要防止越界现象的发生,因为越界的结果要么是程序崩溃,要么是 摧毁程序的堆、栈结构,产生意想不到的结果。 一个例子: int a = 0; // 全局区 main() { int b; // 栈 char s[] = "abc"; // 栈 char *p1; // 栈 char *p2 = "123456"; // 123456 在常量区,p2 在栈上。 static int c =0; // 全局(静态)区 p1 = (char *)malloc(10); // 堆区 strcpy(p1, "123456"); // 123456 在常量区 }
<<向上翻页
©2008-现在 cucdc.com 高等教育资讯网 版权所有