三个问题:
1.声明:
int i;
i=1;
char *p;
p = (char *)malloc(10); 
请问上面的变量i和指针变量p是放在寄存器中还是内存里?大多数人肯定回答是寄存器里,那
此时的赋值或初始化对内存有什么操作?2.堆栈指的是栈,也就是系统会自动在结束后释放,既然会自动释放那为什么会堆栈溢出?堆栈溢出和内存泄漏有关系吗?按我理解一般是对堆的操作而非栈的操作才会产生溢出类问题的,有点搞糊涂了(堆是malloc出来的嘛)3.链表在寄存器是怎么存储的

解决方案 »

  1.   

    你的第一个问题在调试器里看看汇编,自然就清楚了。如果看不懂汇编,倒真是很难学好C语言。堆栈可以理解为一个指定大小的全局数组。入栈、出栈只是调整指向数组某一位置的堆栈指针,并没有什么内存被释放。既然大小有限,当然可能溢出。
    内存泄漏是指动态分配的内存没有被正确释放,这和进程的堆栈没有任何关系。链表在寄存器是怎么存储的?这个问题太莫名其妙了。如何使用寄存器是编译器的事情,我们只能通过汇编看一看。C程序员只要了解到自己的每条语句会对存储器产生怎样的操作就可以了。