C老头和Java小子的硬盘夜话

Japanese-Chinese Machine Translation Model with Transformer & PyTorch Define model parameters and instantiate model. 这里我们服务器实在是计算能力有限,按照以下配置可以训练但是效果应该是不行的。如果想要看到训练的效果请使用你自己的带GPU的电脑运行这一套代码。当你使用自己的GPU的时候,NUM_ENCODER_LAYERS 和 NUM_DECODER_LAYERS 设置为3或者更高,NHEAD设置8,EMB_SIZE设置为512。 阅读详情

这是一个程序员的电脑硬盘, 在一个叫做“学习”的目录下有两个小程序, 一个叫做Hello.java , 另外一个叫做hello.c 。 

Hello.java 自视甚高,有点看不起老派的hello.c , 经常叫他“C老头”。 

这hello.c 也瞧不起“嚣张”的 java 程序, 也给他起来一个外号: “Java 小子”。 

但是这个目录下没有其他人, 每天深夜,主人睡去以后就是无边的黑暗和无尽的孤独,  尽管互相看不顺眼,  C老头和Java小子还是得聊聊天解闷。 

“C老头儿, 我听说你们C语言在诞生的时候也是以可移植性著称?”  Java 小子率先发难,充分发挥了中国人话里有话,笑里藏刀的特点。可移植性是Java最引以为傲的亮点, 编写一次,处处运行可不是说着玩的, 他决定以己之长攻彼之短,先给C老头挖个坑, 等他入坑后再羞辱他一番。

“哪里哪里, 我们可比不上你们Java ”  没想到C老头竟然不跳坑, Java 小子的招数被化于无形。 

“那你们怎么号称移植性好啊,难道在Windows平台上开发的程序能运行在Linux上?”  Java小子心有不甘,继续穷追不舍。 

“我们那是代码的可移植性,不是程序的可移植性,比方说吧, 像我这个hello.c 可以在windows上编译运行, 也可以在Linux上编译运行, 完全不用修改代码。 ”

0?wx_fmt=png

Java 小子感到很吃惊, 这是一次编写到处编译啊, 好像不比自己差啊。 他觉得有点沮丧,看来这一板斧砍不下去了。

可是转念一想, hello.c只是个非常简单的程序,像Windows、Linux上都有他的编译器和标准程序库, 那肯定可以移植了, 要是使用了系统平台的接口了呢? 

“你要是调用了Windows平台的API,例如创建一个线程,拿到Linux上怎么办?”

“那我们C语言就用条件编译” C老头早就料到Java小子会这么问。

0?wx_fmt=png

“哈哈,有没有搞错, 这么麻烦啊,源代码中这么多古怪的#ifdef, 程序员们还不累死。 ” Java小子终于抓住了把柄。 

“这已经很不错了,在我们C语言刚刚诞生的时候, 可是上个世纪70年代, 根本没有什么Java虚拟机之说, 没有什么抽象层能屏蔽底层的平台API, 可不得辛苦程序员?” C老头说得很客观,Java 小子的嚣张的气焰消失了大半。 

“那C语言怎么不与时俱进,也搞个虚拟机啊”  Java 小子异想天开。 

“这你就不懂了, C语言生来就是做系统级编程的,就是要贴近硬件,追求性能和效率,弄个虚拟机,我怎么去直接操作内存?  和硬件交互?   对了,我们可以用指针可以直接操作内存,效率极高, 你的Java就不行了吧” 

“Java 当然没有指针了, 那玩意儿太容易出错,也容易出现漏洞, 我们的James Gosling老爹就禁止我们直接操作内存。”

“我们C语言一旦编译链接以后,就成为一个可以独立执行的程序了, 而你呢,只是变成一个Hello.class 而已,没有虚拟机, 你都运行不了, 说得难听一点, 就是一个寄生虫啊。”  Java 老头不动声色,开始组织反击。 

Java 表示无言以对。 

“还有啊, 我的hello.exe一旦运行, 那就是一个独立的进程,拥有一个独立的地址空间,被CPU独立调度; 而你的Hello.class 什么都不是, Java虚拟机(java.exe)才是一个进程,Hello.class 被装载以后只能在这个进程里作为一个线程来运行, 生活的空间也就是什么方法区、堆.....  这境界也差得太远了吧”     

姜还是老的辣, C老头招招致命。 

"等等, 你刚才说了一个什么词来着,链接?这是什么鬼东西?" Java 小子抓住了一根稻草。

“链接你都不懂?  真够老土的,  赶紧去看看《深入理解计算机系统》第7章吧。 简单来说是把一个符号和这个符号的地址给绑定起来。”

“我只看过《深入理解Java虚拟机》 , 没看到什么链接啊, 你那个定义太抽象了,没人能听懂!”

C老头心里鄙视了一下Java小子,所学果然浅薄, 盘算着举个例子来说明下什么是链接。 

“你知道编译是怎么回事吗? ” C 老头打算另辟蹊径给Java讲讲。

“那我肯定知道啊, 我这个Hello.java经过编译以后,不就变成Hello.class了” 

“我们C语言的程序,经过预处理,编译,汇编等步骤以后,能变成一个叫做'目标文件' 的东西”

0?wx_fmt=png

“假设我这个hello.c程序又调用了cal.c中的函数add :”

hello.c : 

0?wx_fmt=png

cal.c : 

0?wx_fmt=png

“那就会生成两个目标文件, hello.o 和 cal.o”

0?wx_fmt=png

Java 小子问道: “难道你这个hello.o 不能执行吗? ”

“那肯定不能执行,你看那个add函数的定义是在cal.o 这个目标文件中, 我hello.o中根本就没有啊!怎么执行?   所以编译器只好在hello.o 中记录类似这样的东西:hello.o 中需要调用add 函数,但是这个函数的实际地址不在本文件中,链接的时候需要找到实际地址,把它给替换掉! 替换的过程就是一个重定位的过程 , 这一步做完了,才可以执行。  ”

0?wx_fmt=png

Java 小子说: “不对吧, 假设我也调用了另外一个类Calculator.java 中add方法, 我们俩编译以后生成两个class 文件,这两个文件完全独立, 不用做链接, 直接就可以运行啊。 ”

0?wx_fmt=png

“你们肯定会做链接的,只不过这个链接不是在编译期做的,而是在运行期做的。 等到Hello.class被装入你的Java虚拟机运行的时候, 会发现有个指令要调用Calculator的add方法, 这个时候就需要装载Claculator.class ,找到add方法来调用执行。  这也是一种链接,只不过是运行时的动态链接而已。”  C老头做了一个总结陈述。 

Java 小子现在明白了C老头说的链接的含义: 把一个符号(add函数的名称)和这个符号的地址(add函数的真正地址,那里有add函数的指令)给绑定起来。 

“这老头还挺厉害嘛”  Java小子心里不由得对C老头产生了敬意, 他决定从明天开始,不再叫他C老头了,叫他老师, 向他多多请教。

眼看着天马上亮了,两人互道晚安。 

第二天半夜,Java小子兴冲冲地找C老师讨教, 可是hello.c已经找不到了, 同一个目录下来了一个叫做hello.py的新家伙, 他热情地对Java小子打打招呼: “你好,我是Python,初来乍到,请多多关照。” 

“你知道hello.c去哪儿了吗?”

“他呀, 程序员主人觉得C语言的指针太复杂了,实在是学不会,就放弃了, 顺便把hello.c给删除了。 ”

(完)

你看到的只是冰山一角, 更多精彩文章,请移步《码农翻身2016文章精华》或者《码农翻身2017上半年文章精华》

有心得想和大家分享? 欢迎投稿 ! 我的联系方式:微信:liuxinlehan  QQ: 3340792577


640?

优秀人才不缺工作机会,只缺适合自己的好机会。但是他们往往没有精力从海量机会中找到最适合的那个。

100offer 会对平台上的人才和企业进行严格筛选,让「最好的人才」和「最好的公司」相遇。

扫描下方二维码,注册 100offer,谈谈你对下一份工作的期待。一周内,收到 5-10 个满足你要求的好机会!

0?wx_fmt=jpeg

通达信指标加密DLL加密解密三个公式源码准确率90%以上超级指标精准买卖绝世指标 通达信指标加密DLL加密解密三个公式源码准确率90%以上超级指标精准买卖绝世指标 1 超级指标 指标公式:买卖提示非常明显(适合通达信) 指标源码如下: M:3 100 60 N 3 100 30 散户线: 100*(HHV(HIGH,M)-CLOSE)/(HHV(HIGH,M)-LLV(LOW,M));RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100; K:=SMA(RSV,5,1); D:=SMA(K,3,1); J:=3*K-2*D;主力 阅读详情

相关推荐

RML2016.10a (CNN、LSTM、CNN-LSTM、CNN-LSTM-Multi-head-attention, TensorFlow)

RML2016.10a (CNN、LSTM、CNN-LSTM、CNN-LSTM-Multi-head-attention, TensorFlow) 包含所有数据和代码,支持一键运行(jupyter)

qq_40999533的博客 1485

Java入门(六):高级

目录 3.Java高级 3.4 UML类图 3.4.1 UML概念图 3.4.2 绘制UML工具 3.4.3 事物 3.4.4关系 3.5 Java设计模式 3.5.1 概述 3.5.2 设计模式的分类 3.5.3 设计模式的六大原则 3.5.4 几种重要模式: 3.6 Java测试开发必备工具 3.6.1 源代码管理工具 3.6.2 SVN应用 3.6.3 git应用 3.6.4 Maven应用 3.6.5 Jenkins应用 3.6.6 PipleLine应用 3.

sulia1234567890的博客 6472

从SAR信号到洪涝地图:基于Sentinel-1数据的水体快速提取实战

本文详细介绍了如何利用Sentinel-1 SAR数据快速提取水体信息并生成洪涝地图的实战方法。通过预处理五部曲和SDWI指数计算,结合具体案例展示了SAR技术在洪涝灾害应急监测中的高效性和准确性,为救援决策提供关键支持。

weixin_29201313的博客 464

java.lang.ClassCastException: XXXX$$_javassist_1 cannot be cast to javassist.util.proxy.Prox

Struts2与Hibernate中包冲突  原因是有两个javassis的jar包,一个是hibernate的,一个是struts2的…,把低版本的删掉即可! 去lib文件夹里面找相同类型的包 把低版本的删掉就行了 可能是在倒入hibernate包和struts包时有相同的包 但版本不同

jiangbin881的博客 3109

从药企研发视角:如何用GNN提升分子水溶性预测准确率?PyTorch+ESOL全案例

本文从药企研发的实际需求出发,详细介绍了如何利用图神经网络(GNN)技术,结合PyTorch框架和ESOL数据集,构建并优化分子水溶性预测模型。通过完整的代码案例,深入探讨了分子图数据处理、GNN架构设计、超参数调优以及模型评估与解释等关键环节,旨在帮助研发团队提升预测准确率,从而更高效地筛选和优化候选药物分子。

weixin_29054399的博客 293

手把手教你学SINULINK-- --Linear Transformer 模块

模块是 Simulink 中用于模拟理想变压器行为的重要工具。通过本文的详细介绍,希望你能更好地理解和使用模块。

MHD0815的博客 2614

Postfix + Clamav + Amavisd-new 在 Red Hat Linux 9 上

Postfix + Clamav + Amavisd-new 在 Red Hat Linux 9 上的安装 出处:疯狂老头的博客 作者:疯狂老头 时间:2006-9-5 23:25:00 Amavisd-new是邮件代理伺服器(MTA)和防毒软件之间的中介程式,搭配其他病毒扫描软件,如Clam Antivirus、Sophos Sweep等,就可以让邮件伺服器过滤含有病毒的邮件。   这套软件的

Robert's Log 1万+

Java使用POI生成柱状图导出到word文档(柱状图)

本篇文章主要介绍,如何使用Apache POI组件生成柱状图导出到word文档中,具体步骤看下文。 一、实现效果 Java使用POI技术生成柱状图导出到word文档中,最终生成的柱状图如下所示: 二、环境准备 编程语言:Java 第三方依赖:Apache POI Apache POI依赖代码如下所示: <dependencies> <dependency> <groupId>org.apache.poi</groupId.

✅ Java 开发工程师 7376

Java中的String类

一、构造函数 String(byte[ ] bytes):通过byte数组构造字符串对象。 String(char[ ] value):通过char数组构造字符串对象。 String(Sting original):构造一个original的副本。即:拷贝一个original。 String(StringBuffer buffer):通过StringBuffer数组构造字符串对象。 例如:

Mook的博客 439

基于STM32L4XX 、HAL库的SGM452B数字温度传感器驱动应用C语言程序设计

SGM452B_RESOLUTION_12BIT = SGM452B_CONFIG_R1 | SGM452B_CONFIG_R0 /* 12位分辨率,精度0.0625°C,转换时间200ms */SGM452B_RESOLUTION_11BIT = SGM452B_CONFIG_R1, /* 11位分辨率,精度0.125°C,转换时间100ms */SGM452B_RESOLUTION_10BIT = SGM452B_CONFIG_R0, /* 10位分辨率,精度0.25°C,转换时间50ms */

PP_Cottage的博客 329

【华为OD机试真题】4、字符统计及重排 | 机试真题+思路参考+代码解析(C++、Java、Py)

题目描述 >给出一个仅包含字母的字符串,不包含空格,统计字符串中各个字母(区分大小写)出现的次数, 并按照字母出现次数从大到小的顺序。输出各个字母及其出现次数。 如果次数相同,按照自然顺序进行排序,且小写字母在大写字母之前

KJ.JK 3290

漫画 | Java小子和C老头儿的硬盘夜话

更多精彩技术漫画,尽在码农翻身后记:可移植性是Java最引以为傲的地方, 编写一次,处处运行,但是C语言在诞生的时候也是以可移植性著称,但这种移植性是代码的可移植性, 不是程序的可移植性...

码农翻身 4842

FANUC机器人通过ROBOGUIDE实现与实际的机器人进行程序导入导出的具体方法示例

FANUC机器人通过ROBOGUIDE实现与实际的机器人进行程序导入导出的具体方法示例

Robot_PLC_HMI_Automation 6544

90后“老头儿”和00后Go小子的硬盘夜话

来自:码农翻身(微信号:coderising)作者:刘欣1初次见面虽然这个目录中各种编程语言写的程序层出不穷,但Java还是怀念不幸罹难的C老头儿。他经常给同一目录中的Python ,Ruby说C老头儿知识多么渊博,贴近硬件运行,速度飞快,能从他身上学到很多东西等等。(注:参加《C老头儿和Java小子的硬盘夜话》)今天目录里入驻了一个新家伙,Java一看文件名"hello.go"就知道这是一门新的

程序猿 1444

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Python和Java的硬盘夜话

&#13; &#13; &#13; &#13; &#13; &#13; &#13; 点击上方“程序员小灰”,选择“置顶公众号”有趣有内涵的文章第一时间送达!本文转载自公众号  码农翻身...

程序员小灰的博客 1510

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

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

转载---滋滋有味看完的一篇文章关于python与java夜话

这是一个程序员的电脑硬盘,在一个叫做“学习”的目录下曾经生活着两个小程序,一个叫做Hello.java,即Java小子;另外一个叫做hello.c ,也就是C老头儿。 C老头儿的命运比较悲催,程序员主人觉得C语言的指针太复杂了,内存管理太难了,实在是学不会,就放弃了,顺便把它给删除了! Java小子很怀念它,因为C老头儿虽然老派,但知识渊博,教了他不少东西。 (码农翻身...

dianxunma2886的博客 153

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

我对Java平台的理解

大二开始。 我终于接触到久仰大名的Java。 分享一篇写的很可爱的C与Java的文章:C老头和Java小子的硬盘夜话 一点理解 虽然还没有深入学习Java,但是之前有学过C/C++,小部分内容看不懂也不影响。 首先,知道了Java虚拟机这个看起来就很厉害的东西。没错它真的很厉害,它可以屏蔽操作系统的相关信息使程序有很强的可移植性,同一个程序可以实现"write once,run anywher...

ChrissieZHENG的博客 260

Python和Java两个强大语言的对话,搞笑啦

这是一个程序员的电脑硬盘,在一个叫做“学习”的目录下曾经生活着两个小程序,一个叫做Hello.java,即Java小子;另外一个叫做hello.c ,也就是C老头儿。C老头儿的命运比较悲催,程序员主人觉得C语言的指针太复杂了,内存管理太难了,实在是学不会,就放弃了,顺便把它给删除了!Java小子很怀念它,因为C老头儿虽然老派,但知识渊博,教了他不少东西。(码农翻身注:参见文章《C老头和Java小子...

weixin_34026276的博客 412

Python和Java今时昨日谁混的更好?

Python和Java的硬盘夜话 原创: 刘欣 码农翻身 5月10日 原文链接:https://mp.weixin.qq.com/s/0z-KbJS3dvNs2XlsvSGVEw 这是一个程序员的电脑硬盘,在一个叫做“学习”的目录下曾经生活着两个小程序,一个叫做Hello.java,即Java小子;另外一个叫做hello.c ,也就是C老头儿。 C老头儿的命运比较悲催,程序员主人觉得C语言的...

危险、的博客 258
上一篇: 小白科普:分布式和集群
下一篇: 国庆节去哪儿
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值