c++、java、javascript是如何执行的
c++编译执行过程
c++是编译性语言,需要编译器对。以gcc为例、整个编译过程分四步
- 预编译——宏的替换、注释消除
// 进入到代码test.cpp所在的文件夹,执行命令:
g++ -E test.cpp > test.i
// 这时会生成一个后缀为.i的test.i的文件,这个文件里面进行了宏的替换,还有注释的消除等操作。
- 编译阶段——生成汇编语言
g++ -S test.cpp
// 这个时候,会生成一个后缀为.s的文件,test.s,.s文件表示是汇编文件,用编辑器打开就都是汇编指令。
- 汇编阶段——生成机器代码
g++ -c test.cpp
// 会生成一个后缀为.o的文件或者是.obj的文件,test.o,.o是gcc生成的目标文件,用编辑器打开就都是二进制机器码。
// 目标文件的后缀为.obj;对于GCC编译器,目标文件的后缀为.o
- 链接——生成可执行程序
g++ test.o -o test
// 会生成一个后缀为.exe的文件,test.exe,即连接目标代码,生成可执行程序

c/c++执行过程、查执行文件在运行时,载入到内存代码区进行运行。

java语言编译执行过程
Java是半编译型,半解释性语言。编译执行过程如下:
需要相应平台解析器(JVM)

字节码文件具有平台无关性,只面向JVM。
javascript执行过程
chrome和node.js解析引擎为 V8

代码如何载入运行的
C/C++中内存区分
栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈
堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
全局区(静态存储区)(static)— 全局变量和静态变量的存储是放在一块的,a .初始化的全局变量和静态变量在一块区域(DATA段), b .未初始化的全局变量和未初始化的静态变量在相邻的另一块区域(BSS段)。程序结束后有系统释放
文字常量区—常量字符串就是放在这里的。 程序结束后由系统释放
程序代码区—存放函数体的二进制代码。
我们将文字常量区和代码区视为一个部分,即代码区
所有程序都需要载入内存进行运行
参演内存会分为:堆,栈、数据区(变量区)、代码区(机器码)



大端小端
- 依稀记得 左值、右值
操作符号 左、右
我们写程序时,代码运行时是在做什么?
程序=算法+数据结构
关于运算:算术运算 逻辑运算 赋值运算 关系运算。**我们所有运算操作的都是数据 **
>var obj = {a:1,b:2};
>var obj1 = obj;
>var a1 = obj.a;
>var b1 = obj.b;
>var c = a + b;
>obj = null
>obj1 = null





1378

被折叠的 条评论
为什么被折叠?



