【区别总结】C、Java和脚本语言区别

MZI and MI Optical Waveguide(马赫曾德与迈克尔逊光波导) 注意,这里的 “镜子” 并不是真的在波导中做一个镜子出来,而是通过使用一个 1x2 的 MMI 结构将 MMI 输出的两个端口连接起来形成一个 “宽带镜子”。对于这里形成镜子的详细原理,后面有时间了我们再做更加详细地介绍。,它由一个 splitter 构成和两个仿佛带有 “镜子” 的臂组成。相比较于 MZI,光波可以在它的臂中传输,最终从进光口处出去得到相长或者相消干涉,很明显,在。)的折射率,从而使得两个臂上产生的相位差值不同,最终得到相长或者相消干涉的结果。这里,给大家介绍一下。,它更像是一个折叠的。 阅读详情

1、对象内存

C++对象内存布局(虚函数表,值类型的子对象直接分配内存单元,引用类型的子对象记录地址),注意不为成员函数分配任何内存空间,代码中的成员函数全部在代码区,且代码中成员函数的调用在编译时就翻译成代码区某个函数首地址的调用,也就是说成员函数本质上跟普通函数没任何区别,只是加了类名这个作用域限制了而已,而且这个限制只在对编译器起作用。所以,C++类在编译后就不起作用了,也可以理解为类只是给编译器看的。

其链接生成的exe文件中就两大区:代码区和全局区。

代码区存放的全部是,也仅仅是各种函数体的语句,此时成员函数和普通函数没任何区别,而且只有函数体的语句,代码区绝无其他任何东西;

全局区存放的是全局性的,也即进程初始化就分配内存的东西,包括全局的常量,全局的变量,全局的对象。简单理解,在编译器过后,C++程序只有两大类实体:函数和变量(对象也是变量)。


Java对象内存布局(值类型的子对象直接分配内存单元,引用类型的子对象记录地址,成员函数的首地址),Java的内存对象布局含有成员函数的首地址,也就是说Java类描述的比较完全,而且java类在编译后仍然存在,运行时类有jvm虚拟机自动管理,所以有反射机制。

其生成的可执行文件包括代码区(java中叫方法区)和全局区(java中叫静态区)和类区。

其中代码区只有函数体的代码,又叫方法区实至名归;

全局区之所以又叫静态区(更应该叫静态变量区)是因为Java是纯面向对象的语言,没有全局的简单类型的变量或对象,也就是说代码中所有定义的实体变量或对象一定都是写在类体中的,不象C++可以写在类体外,其全局变量本质都是静态变量,即写在类体中的静态变量(包括对象)都是全局变量,这些静态的变量在类加载时在静态区分配相应内存;

类区是存放加载的类的信息。

另外一个和C++很重要的不同是,Java的上述三区的内存空间大小不是固定的,都是动态增长的,因为Java中的所有实体(变量,函数)都是写在类体中的,Java运行时用到那个类才动态加载那个类,而加载类的过程中就完成了类中成员函数和静态实体(全局实体)的内存分配过程,其中成员函数动态放入方法区,静态变量动态放入静态区,类放入类区。            至于new一个对象是在栈中执行的代码(函数体内的代码),很简单,不做讨论。

简单理解,在编译器过后,Java可执行程序只有一个空壳,运行时用到哪个类时动态加载那个类,并且动态分配三大实体内存空间:函数、静态变量和类。


PHP等脚本语言内存布局(子对象的字符串形式的名字),就这么简单,无论子对象是变量还是函数,都不区分类型,只记录下名字。由于脚本语言不经过编译,可以理解为运行时先把一个脚本文件全部加载进内存进行简单处理,然后一个语句一个语句的运行(一个完整的语句作为一个运行单位),运行一个语句时简单进行翻译,看看该语句是干什么(无非就是要么读存内存,要么执行函数),然后找到语句的主体(变量名或函数名)后执行即可。

我无从查证脚本语言的对象的内存布局,不过推测就是分为三大区:代码区、DOM形式的树形结构区和变量区。

一个脚本文件加载进内存简单处理后,把所有的函数体放入代码区,把所有定义的变量(包括对象)和函数按照父子关系形成一个DOM形式的树形结构,结构中只存放个个变量的名字或函数的名字(实际上只存放名字和该名字对应的东西分配的内存位置,不区分到底是变量还是函数)。运行时发现是处理变量则从DOM找到这个变量的全名,根据这个名字去变量区(有的语言就是堆区)找到具体内存空间的内容;发现是处理函数,则从DOM找到这个函数的全名,然后根据这个名字在代码区找到函数体体开始运行。

所以脚本语言运行很灵活,例如PHP中有对象值的说法形如:obj.name( ),像这样调用函数,其本质是首先发现这个语句是函数调用功能,语句的主体是obj.name,则从DOM形式结构找到那个name实体(不管类型),然后找到其分配的内存的位置,即函数体,开始执行代码。编译型的语言如Java是绝对不能像这样的,因为对Java来说,obj.name在编译期就翻译成某个具体位置的内存空间了,编译时就绝对确定了,且把obj.name看成一个简单字符串进行编译成具体地址,不会像脚本语言那样进行复杂分析。


【总的来说】:当进程开始时,C++程序是加载整个exe文件,然后分配各大区的内存空间;Java程序是加载第一个类,然后分配各大区的内存空间;PHP等脚本语言是加载整个脚本,然后分配各大区内存空间。

1.DJI-payload SDK负载开发准备和硬件连接及运行示例代码 大疆psdk开发环境 阅读详情

相关推荐

SD-WAN组网案例——数据中心

SD-WAN组网案例——数据中心

2301_78457663的博客 705

静态语言和脚本语言的区别

在计算机编程语言中,可以将编程语言分为静态语言和脚本语言两类,这两类编程语言最主要的区别是执行方式的不同。

qq_54186956的博客 3975

USB-C快充协议分析仪:QC/PD双协议识别与功率监测设计

USB-C快充协议是现代移动设备能量传输的核心技术标准,其本质是通过物理层电压特征(如DP/DM组合、CC线BMC编码)实现动态电压协商。理解协议握手原理对充电器研发、兼容性测试及故障诊断至关重要。本方案聚焦受电端(Sink)视角,基于FUSB302B与高阻抗DP/DM采样电路,实现QC2.0/QC3.0/QC4+与PD2.0/PD3.0的实时识别与状态机解析;结合INA219高精度电流检测与μs级同步采样,达成±0.06%功率测量精度。典型应用于快充芯片验证、产线协议一致性测试及第三方评测,为USB供电系

weixin_42153793的博客 244

程序的两种执行方式,静态语言和脚本语言

程序的两种执行方式,静态语言和脚本语言

m0_74162258的博客 2922

数据结构与算法 —— 最短路径Dijkstra算法(迪杰斯特拉)详细图解以及python实现

前两章我们讲到了关于图的基本知识,和广度/深度优先搜索。本章,我们将介绍加权图和最短路径的相关知识。最短路径和最小生成树是图论中常见的问题。最短路径是指在一个图中找到两个节点之间的最短路径,最小生成树是指在一个图中找到一个连通子图,使得所有节点都能够互相到达,且总权值最小。最短路径算法常见的有floyd算法(弗洛伊德算法)和 dijkstra算法(迪杰斯特拉)。本文只介绍dijkstra算法。最短路径运用非常广泛,比如在导航系统中,确定两个地点间哪条路线最短;

‘’ 2万+

NS-3 和Aqua-sim-ng 学习笔记(一)

因为要搞水下网络,OMNET++不太合适,就转Aqua-sim。这是基于NS-2上的模型,NS-2需要额外学一门tcl脚本语言。 正好查到它的一个升级版Aqua-sim-NG,在github上,https://github.com/rmartin5/aqua-sim-ng是基于NS-3的,只需要基本的C++,不用学tcl语言。美滋滋。 装好ubuntu之后,安装NS-3和Aqu...

diboshang8820的博客 2191

计算机基础小记-动态语言、静态语言、脚本语言

动态语言(Dynamic Language)和静态语言(Static Language)是编程语言的两种主要类型,它们在语言设计和代码执行时有着不同的特点。

qq_40140808的博客 1583

Springboot计算机毕业设计校园树洞微信小程序【附源码】开题+论文+mysql+程序+部署

因此,开发一款专门针对校园用户的树洞微信小程序,为学生提供一个安全、私密、便捷的倾诉和交流平台,具有重要的现实意义和应用价值。通过本研究的实施,我们预期能够开发出一款功能全面、操作便捷的校园树洞微信小程序,为校园师生提供一个安全、私密、便捷的倾诉和交流平台。此外,通过不断优化和改进小程序的功能和服务,我们预期能够提升用户体验和满意度,推动校园树洞小程序的持续发展,并为校园生活的和谐与健康发展做出积极贡献。同时,通过不断优化小程序的功能和服务,提升用户体验和满意度,推动校园树洞小程序的广泛应用和持续发展。

光冯毕设程序 1666

Java调用Lua脚本的通用工具类

Lua是一种小巧的脚本语言,java调用选用LuaJ实现 一、Java调用Lua脚本 1、引入luaj依赖 maven: <!-- https://mvnrepository.com/artifact/org.luaj/luaj-jse --> <dependency> <groupId>org.luaj</groupId> <artifactId>luaj-jse</artifactId> <version>3..

文若书生的专栏 2512

手把手教你用VSCode+SDL在Ubuntu上跑LVGL8.2模拟器(附插件清单)

本文详细介绍了在Ubuntu系统上使用VSCode和SDL库搭建LVGL8.2模拟器环境的完整流程,特别适合嵌入式开发者(如全志F1C100s平台)进行UI设计验证。从环境配置、项目编译到VSCode深度集成,提供了实用技巧和常见问题解决方案,帮助开发者实现'先模拟后真机'的高效开发模式。

weixin_33737134的博客 356

DA14531之如何Debug(在线调试、Jlink仿真、串口打印)

在线调试和串口打印调试。在线调试是Keil软件配合Jlink编译、烧录、仿真为一体的,其操作包括:运行、停止、打断点,单步运行等。而串口打印调试,只需打开相关配置,让arch_printf()函数正常输出串口数据。若想在初始化完成后打印arch_printf(“goto Loop\r\n”);波特率为115200,接收到串口消息goto Loop。连好线后,点击仿真按钮,在线Jlink调试。

hejinwu1314的博客 1792

java对脚本语言的支持

使用java执行脚本语言,是java对脚本语言的支持

小金的博客 1116

LLaMA-Factory微调教程2:命令行sft微调

本文介绍了如何使用llama-factory项目在本地运行Qwen2-7B大语言模型进行对话。首先通过llamafactory-cli env查看环境配置,然后使用git lfs下载Qwen2-7B模型。创建配置文件qwen2_7b_instruct.yaml,修改模型路径和模板参数。最后通过llamafactory-cli chat命令启动对话服务,加载模型配置文件和tokenizer,完成环境初始化后即可进行交互式对话。

Cachel Wood的博客 8814

java和脚本语言 区别_【区别总结】C、Java和脚本语言区别

1、对象内存C++对象内存布局(虚函数表,值类型的子对象直接分配内存单元,引用类型的子对象记录地址),注意不为成员函数分配任何内存空间,代码中的成员函数全部在代码区,且代码中成员函数的调用在编译时就翻译成代码区某个函数首地址的调用,也就是说成员函数本质上跟普通函数没任何区别,只是加了类名这个作用域限制了而已,而且这个限制只在对编译器起作用。所以,C++类在编译后就不起作用了,也可以理解为类只是给编...

weixin_35958479的博客 376

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

什么是脚本语言?为什么python是脚本语言?而C和JAVA不是? 图解解释型语言和编译型语言区别

什么是解释型语言?什么是编译型语言?python是什么类型的语言?JAVA又是什么类型的语言?哪种语言运行效率高?这些问题对于业内人士来说,根本不能算问题,但是对于新手村的码农来说,可能还是有点晕的,我也收到不少这样的提问。语言解释太苍白,那就让我用图像来详细回答一下吧。

qq_62355066的博客 219

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

java是脚本语言吗_脚本语言和c语言,c++,java 那些语言有啥区别?

机器语言 象0001000111这样的二进制的代码汇编语言 用一些简单的词代替二进制代码C语言,在汇编语言的基础上,进一步抽像与体系化,开始有各种库、调用方式、函数之类的高级语言特性,同时需要根据不同的CPU等硬件平台特征编译后运行,从C开始的语言都被称之为高级语言,其它语言基本上是以C为低层或运行在C或C++建立的运行库/运行环境之下。强类型,编译期检查 是c c++ java等语言的特点,强类...

weixin_36048947的博客 712

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

脚本语言和编程语言的区别和定义

脚本语言和编程语言的比较 脚本语言 脚本语言是为了缩短传统的编写-编译-链接-运行过程而创建的计算机编程语言。 和传统的Java,c++等编程语言不同,脚本语言,不需要编译器!!!,它需要的是==解释器 ==, 什么意思呢?也就是说,脚本语言是解释执行的, 打个比方:我有一款专用的软件,而这款专用的软件上面执行特定的操作才能和我的软件进行交互,而这个操作的集合就是解释器,进行的操作就是脚本语言,当...

zheng_cfcsdn的博客 2063

什么是脚本语言

脚本语言是读一行执行一行,每“一行”都独立与其他行不相关 非脚本语言类似c/java需要经过整个代码编译再执行,代码之间互相关联,其中一行出错可能会导致整个程序出错

weixin_45383240的博客 175

java和脚本语言 区别_什么是脚本语言?和编程语言的区别

展开全部各种动态语言,62616964757a686964616fe58685e5aeb931333365643661如ASP、PHP、CGI、JSP等,都是脚本语言。计算机语言总的来说可以分成机器语言,汇编语言,高级语言(就是你所想的程序语言,如:VB,C,C++,C#,JAVA,Dephi..)三大类。脚本英文为Script。实际上脚本就是程序,一般都是有应用程序提供的编程语言。应用程序包括浏...

weixin_39820910的博客 1119

编程语言和脚本语言的区别

1. 脚本语言:C Shell、JavaScript、Nuva、Perl、PHP、Python、Ruby、Tcl、VBScript、CSS(常见) 脚本语言是为了缩短传统的编写-编译-链接-运行过程而创建的计算机编程语言。和传统的Java,c++等编程语言不同,脚本语言不需要编译器,它需要的是解释器。也就是说,脚本语言是解释执行的,例如有一款专用的软件,而这款专用的软件上面执行特定的操作才能和...

Artemis1220的博客 4205

标记语言、脚本语言和编程语言的含义和比较

一、含义 标记语言(Markup Language),是一种将文本(Text)以及文本相关的其他信息结合起来,展现出关于文档结构和数据处理细节的电脑文字编码。与文本相关的其他信息(包括例如文本的结构和表示信息等)与原来的文本结合在一起,但是使用标记(markup)进行标识。 如:HTML、XML 脚本语言(Script language,scripting language,script...

ChinaGir的博客 4651

编译语言、解释语言与脚本语言之间的区别

转自:https://blog.youkuaiyun.com/wm_1991/article/details/51853900 资料一: 1、解释型语言与编译型语言的区别翻译时间的不同。。 编译型语言在程序执行之前,有一个单独的编译过程,将程序翻译成机器语言,以后执行这个程序的时候,就不用再进行翻译了。 解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度相对于编译型语言要慢。 C/C++ 等都是...

Candy_GL的博客 1060

关于脚本语言

关于脚本语言我理解的一直不是很透彻。我最先接触的是c语言,汇编。对于脚本语言和c,c#,java等语言的区别一直不是很明白。1.脚本语言,脚本语言或扩建的语言,又叫动态语言。是一种编程语言控制软件应用程序。脚本通常以文本(如ASCII)保存,只在被调用时进行解释或编译。2.脚本语言与编程语言也有很多相似地方,其函数与编程语言比较相象一些,其也涉及到变量。与编程语言之间最大的区别是编程语言的语法和规则更为严格和复杂一些. 3.脚本语言是一种解释性的语言,例如Python、vbscript,javascri

wangchunyan2008的专栏 671

java是编译语言和解释语言_编译语言,解释语言和脚本语言之间的区别

本文写得很好编程语言和脚本语言的区别,法规也很明确点击此处查看1. C / C ++等都是编译语言,而Java,C#等都是解释语言.2. 编译语言在执行程序之前,有单独的编译过程可将程序翻译为机器语言. 以后执行程序时,无需翻译.因此编译后的语言速度很快,但缺点是与平台的相关性很强.3. 尽管Java程序在运行之前也有一个编译过程,但是它不是将程序编译为机器语言,而是将其编译为字节码(可以理解为...

weixin_33345160的博客 375

理解编译型语言和解释型语言的本质区别、Java是编译语言还是解释语言?

非常推荐的一篇文章:某天周末,CPU和JVM聊了起来··· 比较Java和Nodejs 虽然都是翻译后执行 但是脚本语言由高级语言封装的指令集,而不是机器指令集。翻译为高级语言后由高级语言再执行 而编程语言是直接翻译为机器指令集 这应该就是区分编程语言和脚本语言的本质了 Nodejs本质是C的上层封装,所以是脚本语言。 编译型语言:程序在执行之前需要一个专门的编译过程,把程序编译成 为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了 Java翻译执行的是汇编指令,所以是编译语言 .

无数_Mirage的博客 1396
上一篇: 收集-网站后台优秀文章
下一篇: C++软件开发规范
HNFXS985
博客等级 码龄14年 219粉丝 150原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值