为了账号安全,请及时绑定邮箱和手机立即绑定

请教一下大家对Java和C++多线程内存模型有什么看法?

/ 猿问

请教一下大家对Java和C++多线程内存模型有什么看法?

蝴蝶不菲 2019-11-11 13:09:25

对Java和C++多线程内存模型大家有什么看法?


查看完整描述

4 回答

?
莫回无

说的简单点,多线程内存模型就像是程序员写的代码和编译器、虚拟机(例如JVM)、CPU等可能对代码进行修改的系统模块间的契约,只要程序员按照这个模型定义的规则来编写没有data race的程序,那么系统就能正确的执行你的多线程程序,而不会做出些改变程序原本的多线程语义的优化。
我最近在尝试写一篇关于C++多线程内存模型的文章,大概的思路是先介绍sequential consistency(sc);再介绍因为sc对性能损失太大,使得很多编译器和CPU的优化都不能做,所以出现了sequential consistency for data race program模型;再介绍下C++1x中特有的atomic类型,以及它怎么保证atomicity和ordering。

查看完整回答
反对 回复 2019-11-16
?
至尊宝的传说

C/C++与java区别如下:
1. Java没有预处理指令,C中的常量定义在Java中用static final来取代。
2. Java中没有C中的全局变量。
3. Java中的主类型的size是确定的,而C中主类型的size跟平台相关。
4. Java中没有了指针,它使用了类似的句柄来取代指针,但是Java中不允许对句柄进行加减,没有取地址操作符之类的东东。
5. Java有垃圾收集机制,不需要自己释放空间。
6. Java没有goto语句。Java在C提供的控制语句基础上增加了异常处理和标签break和continue语句。这些可以替代goto的作用。
7. C要求一个方法或块中使用的所有局部变量的定义在该方法或块的最开始处定义,而Java允许这些定义在方法或块的任意地方出现。
8. Java不要求在调用一个函数以前已经定义了该函数,可以在调用点后面定义。
9. Java不支持C中的strut 和 union类型。Java支持方法重载
10. Java不支持C中的enum关键字。
11. Java不支持C中的bitfields能力。
12. Java不支持C的typedef。
13. Java不支持C的方法指针。
14. Java不支持C的可变参数表。



查看完整回答
反对 回复 2019-11-16
?
萧十郎

C语言

C语言的优点:

1.简洁紧凑、灵活方便

2.运算符丰富

3.数据结构丰富

4. C是结构式语言

5. C语法限制不太严格,程序设计自由度大

6. C语言允许直接访问物理地址,可以直接 对硬件进行操作

7. C语言程序生成代码质量高,程序执行效 率高

8. C语言适用范围大,可移植性

9. C语言有一个突出的优点就是适合于多种 操作系统,如DOS、UNIX,也适用于多种机型

10.有效地将一个较复杂的程序系统设计任 务分解成许多易于控制和处理的子任务,便 于开发和维护

C语言的缺点:

1. C语言的缺点主要是表现在数据的封装性 上,这一点使得C在数据的安全性上做的有 很大缺陷,这也是C和C++的一大区别。

2. C语言的语法限制不太严格,对变量的类 型约束不严格,影响程序的安全性,对数组 下标越界不作检查等。从应用的角度,C语 言比其他高级语言较难掌握。

3.可重用性差

4.数据安全性差

5.难以开发大型软件和图形界面的应用软件

6.把数据和处理数据的过程分离为相互独立 的实体

7.当数据结构改变时,所有相关的处理过程 都要进行相应的修改

8.每一种相对于老问题的新方法都要带来额 外的开销

9.图形用户界面的应用程序,很难用过程来 描述和实现,开发和维护也都很困难

C++

C++优点:

1.可扩展性强

2.高效 简洁 快速

3.可移植性

4.面向对象的特性

5.强大而灵活的表达能力和不输于C的效率

6.支持硬件开发

7.程序模块间的关系更为简单,程序模块的 独立性、数据的安全性就有了良好的保障

8.通过继承与多态性,可以大大提高程序的 可重用性,使得软件的开发和维护都更为方便

C++缺点:

1.比较底层,易用性不是很好

2.多重继承和友元机制

3.标准库涵盖范围不足

4.开发周期长

5.非并行

6.掌握有难度

7.粒度封装不够

Java的优点:

1.简单性

2.面向对象性(面向对象的程度可以达到 95%)

3.健壮性

4.跨平台性

5.高性能(自动垃圾回收机制)

6.多线程

7.动态性

8.安全性

Java的缺点:

1.效率低(毋庸置疑)

2.跨平台是它最大的优点也是最大的缺点

3.复杂性(做一个项目需要很多的知识,涉 及面广)

 本回答由电脑网络分类达人 赵国琴推荐

 

查看完整回答
反对 回复 2019-11-16
?
哈士奇WWW

JAVA .NET程序都是运行在虚拟机上的,是托管程序。虚拟机基本是与应用层打交道的,这就是没有JAVA .NET做驱动的原因之一。C/C++可以直接和底层打交道。本地代码就是二进制机器能执行的代码,托管代码是运行在虚拟机里的,虚拟机转化为本地代码,效率稍低。
WEB应用(B/S)我不太熟,C C++应该是可以做的,没有框架很复杂。
JAVA .NET对于做WEB应用,都有框架,JAVA更安全,更成熟,运行效率比.NET的要高。但是开发时.NET更方便,各有千秋。

查看完整回答
反对 回复 2019-11-16

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信