概述
C语言和汇编语言的关系?0
问题有点长,希望大家看完,谢谢!
听说过C语言经过编译以后会生成汇编代码?可是我在TC2.0里面
编译C程序后只看到了obj文件和exe文件,asm文件在哪?
我写了一个C语言程序:
#include
int main(){
int i =50;
int* ip = &i;
int** ipp = &ip;
printf("the address of i is %dn",&i);
printf("the address of ip is %dn",&ip);
printf("the address of ipp is %dn",&ipp);
return 0;
}
在vc6.0里面编译执行后运行结果:
the address of i is 1245052
the address of ip is 1245048
the address of ipp is 1245044
我不明白的是: 为什么每次程序编译运行的结果都是一样的???
还有,我发现这三个地址之间都差4,是不是相当于汇编里面,
在数据段中这三个变量是连续定义的,所以地址也是连续的,
并且说明了C语言中int类型的变量占4个字节,int的指针类型
也占4个字节.
(再问一个问题,为什么C语言里面int类型的变量占4个字节?)
这里的地址1245052,1245048,1245044是不是对应着C语言编译
后生成汇编文件中在数据段范围中的地址?
还有一个问题。。
C语言中分配内存空间的一个语句是:
int *p = null;
p = (int *)malloc(sizeof(int)*100);
是在堆里面分配的空间,可是在汇编里面只有代码段,数据段,
堆栈段,还有附加段,"堆" 在那个段中?
我一直认为“堆栈”就是“栈”的意思,难道说“堆栈”是
“堆”+“栈”??
还有,在8086cpu中,寄存器是16位的,所以偏移地址是16位的,
所以一个段最大就是64KB,如果我在malloc函数里面写:
int *p = null;
p = (int *)malloc(sizeof(int)*1000000000000000000);
也就是说开辟了一个大于64KB的堆空间,会有什么后果?
问题有点多,谢谢大家看到最后这句话!
最后
以上就是清新戒指为你收集整理的c语言和汇编语言先学那一个,C语言和汇编语言的关系?的全部内容,希望文章能够帮你解决c语言和汇编语言先学那一个,C语言和汇编语言的关系?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复