程序、变量、内存理解

c++、java、javascript是如何执行的

c++编译执行过程

c++是编译性语言,需要编译器对。以gcc为例、整个编译过程分四步

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

在这里插入图片描述

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值