您的位置:首页 > 职场人生

面试笔试问题总结(二)——堆、栈以及存储问题

2014-08-29 15:41 357 查看
作者:disappearedgod

文章出处:/article/3730203.html
时间:2014-8-29

前言

正文



int a = 9;
int b = 10;
int *p = new int(1);
printf(" %x %x %x",p,&a,&b);




1.既然说到堆和栈,那我来说一个关于文字常量区的常见问题吧

char s[] = "haha";

char *s = "haha";

从编译到执行期,关于这两个的读取有哪些区别?

栈比堆快,
s[] 存在栈里,*s的那个字符串存在文字常量区. char *s = "haha";这上面的字符串,在编译的时候就确定了.

s[]的读取速度快,这里应该是他们的haha是在桟 跟全局数据区,读取效率 是指通过s获取haha的时间

汇编如下结果:



读s[]的时候,直接放到寄存器cl上了,但是读*s的时候,多了一个步骤,读*s的时候要先读指针,然后根据指针读字符。如果本身就是拿整个字符串来使用,那就得另外讨论了 。读字符的时候,s[]较快。
因为寄存器不够用,所以才会把寄存器里面的数据换到内存里面,这个过程加压栈。栈是方便函数调用和局部变量分配的,栈的作用是就为了把常用的数据换到寄存器里面 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: