计算机原理
月凉西厢
穷且益坚,不坠青云之志
展开
-
程序是怎么样运行的
程序是怎么样运行的本文从一个最简单C程序(hello)是如何被编译和链接讲起,描述了一个程序运行的原理。一、程序运行之前使用 IDE(集成开发环境)的朋友们经常会有这样的疑问:代码是怎么从一个文本文件变成可执行程序的呢?代码毕竟不是咒语,一个 C 程序在被运行之前其实经过了四个步骤,两次编译,汇编和链接。1.预编译这里我们只需要知道有一个叫预处理器(prep转载 2014-08-18 14:27:24 · 644 阅读 · 0 评论 -
运行时存储空间的组织和管理
过程:过程、函数等程序单元活动(activation):过程的一次执行活动记录:过程的每次活动中,存储所需的局部数据的一块连续的存储区活动的生存期(lifetime):从过程体开始执行到执行结束的时间,包括执行被其调用的过程所需的时间,以及这样的过程调用过程所花的时间等6.1 局部存储管理6.1.1 过程过程定义←过程名→过程体有返回值的过程称为函数转载 2014-08-18 14:34:57 · 1676 阅读 · 0 评论 -
DLL 导出类时DLL HELL错误及其解决方案
DLL除了可以导出函数之外,还可以导出类。 然而,导出类的DLL在维护和修改时有很多地方必需很小心,增加成员变量、修改导出类的基类等操作都可能导致意想不到的后果。当用户更新了最新版本的DLL库后,应用程序可能再也不能工作了。这就是DLL Hell问题。 如导出如下类Class A{public: int get_a();private: int a;}当需要再新...原创 2018-08-17 10:33:41 · 458 阅读 · 0 评论 -
C++返回对象
C/C++函数在返回值类型的尺寸太大时,在函数返回时会使用一个临时的栈上内存区域作为中转。结果返回值对象会被拷贝两次!其具体的返回实现在不同编译器下的实现时不一样的。 因此,在C++中返回对象的时候,对象需要经过2次拷贝构造函数的调用才能够完成返回对象的传递。一次拷贝到栈上的临时对象里,另一次把临时对象拷贝到存储返回值的对象里。在某些编译器里,返回一个对象甚至需要经过更多的步骤。 因此,尽量不...原创 2018-08-17 14:29:26 · 1921 阅读 · 0 评论