作者:disappearedgod
时间: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";
从编译到执行期,关于这两个的读取有哪些区别?
char *s = "haha";
栈比堆快,
s[] 存在栈里,*s的那个字符串存在文字常量区. char *s = "haha";这上面的字符串,在编译的时候就确定了.
s[]的读取速度快,这里应该是他们的haha是在桟 跟全局数据区,读取效率 是指通过s获取haha的时间
汇编如下结果:
读s[]的时候,直接放到寄存器cl上了,但是读*s的时候,多了一个步骤,读*s的时候要先读指针,然后根据指针读字符。如果本身就是拿整个字符串来使用,那就得另外讨论了 。
读字符的时候,s[]较快。
因为寄存器不够用,所以才会把寄存器里面的数据换到内存里面,这个过程加压栈。栈是方便函数调用和局部变量分配的,栈的作用是就为了把常用的数据换到寄存器里面 。