c语言的各种操作在内存中是怎样执行的?

发布于 2022-10-15 07:47:55 字数 37 浏览 26 评论 0

例如:定义变量、分配空间、赋值等等操作在内存中具体实现过程是怎么样的???

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

等你爱我 2022-10-22 07:47:55

ENTER, LEAVE
CALL malloc
MOV var, data

伤痕我心 2022-10-22 07:47:55

这你妹,说来话长了,LZ有时间没,俺花一个月跟你讲讲,大家一起研究。

^_^。

先去了解运行时栈,了解目标文件中都有些啥...

暗喜 2022-10-22 07:47:55

操作系统、汇编、计算机体系结构
回大学重学这三门课

时光瘦了 2022-10-22 07:47:55

回复 2# cobras

谢谢回复,    能不能用直白的语言描述一下。就是计算机在执行这几个操作的时候的过程。要详细的。
还有就是带初始化的变量定义和不带初始化的变量定义的内存操作是一样的吗?如果不一样,不一样在哪?那个执行的效率更高?

×眷恋的温暖 2022-10-22 07:47:55

回复 3# captivated

    你好,首先感谢你的回复。关于c语句转换到内存的操作,我确实了解的不是很清楚。所以希望赐教。
变量定义的语句最终转化为汇编以后是什么语句??带初始化和不带初始化的变量定义的汇编一样吗?
希望写出他们的汇编,并用汉语讲解出来。

灼疼热情 2022-10-22 07:47:55

回复 4# cugb_cat

这些书我也了解一些,但是都没有从c语言角度出发。 能不能推荐一本关于才语言转化为汇编的书?就是介绍每天c语句被转化成什么样的汇编???
也就是c语句在内存的具体实现形式,一定要详细深入的。包括每一个步骤。

怼怹恏 2022-10-22 07:47:55

回复 6# teclimber

    变量定义的语句最终转化为汇编以后是什么语句??带初始化和不带初始化的变量定义的汇编一样吗?
希望写出他们的汇编,并用汉语讲解出来。

都说了说来话长了。你没了解计算机体系、编译链接之类的基础知识,我讲了也是白讲。

变量定义语句,如果是初始化的全局变量,很简单,汇编语言中有专门在数据区定义变量的方法/伪指令。
比如你在C语言中定义int a = 4;
那么在汇编语言中可能就是在数据区域中这样定义一个符号:
.a  dw  4

如果是未初始化的全局变量/静态变量呢?
那么C语言的编译器会将其放到bss段,目标文件中不会分配空间给bss段,而是在加载时在虚拟内存中为bss段开辟空间。
汇编语句中仍然可能会为bss段像已定义全局变量那样预留(虚拟内存)空间。

而如果是局部变量呢?
函数的局部变量是运行期在栈上分配的。
这个不过就是函数栈/调用惯例而已。编译器不会为局部变量分配空间。

了解这些东西并不困难。要看到编译器根据你的C程序生成的汇编代码难么?...大把工具做这种事情。真是的......
说了先去给我了解计算机理论啦!

枕头说它不想醒 2022-10-22 07:47:55

回复 8# captivated

    你说的那个局部变量的定义就是在栈上分配,是不是就是移动一下栈的指针?
还有  .a dw  4   这个是全局变量的定义呢,还是局部变量定义?
局部变量的初始化是不是也是在栈上操作?他这个初始化的过程需不需要多余的指令周期?

只为守护你 2022-10-22 07:47:55

回复 9# teclimber

   

变量定义语句,如果是初始化的全局变量,很简单,汇编语言中有专门在数据区定义变量的方法/伪指令。

     我不明明白白的说了是全局、初始化了的变量嘛。

     局部变量根据ebp加上偏移来访问。函数代码段会处理这些事情。
     编译器可能直接为局部变量预留栈空间。代码就是sub xxx, %(esp)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文