Meta的Folly库源代码如何实现手动内存管理

数以百计的C/C++替代品将会出现,但C/C++将永远与我们同在!

每个CPU都带有一种称为ISA(指令集架构)汇编的电路语言。ISA程序集是一种硬件语言,由基本数据操作、数学计算和结构化编程(即jmp)的操作组成。但是,为每个计算需求编写汇编代码无疑是耗时的,因此过去的程序员发明了对人类友好的语言和编译器。

计算机科学家先驱DennisRitchie为Unix操作系统的研发需求实现了C语言。在这段时期,整个计算机技术领域都在进行基础的最初建设,所以几乎所有的程序员都使用C语言来构建早期的计算程序,比如编译器、操作系统、数据库软件和网络程序。后来,C++扩展了C语言,保留了C语言的性能特点,一门具有更多开发人员特性的新的编程语言诞生了。

在20世纪20年代,程序员实现了C/C++的备选品,如Go、D、Rust和Carbon,它们具有C/C++从未提供的各种特性。但这些语言仍然只是C/C++的备选品,而不是替代品,原因如下:

1C和C++是基础语言

即使存在稳定的C/C++替代方案,许多程序员仍然喜欢用C或C++进行系统编程。在大多数情况下,程序员选择C++是因为它是与操作系统级API通信的最佳语言。例如,谷歌用C++编写了Flutter引擎:

Flutter引擎使用C/C++应用GTK库函数,

截图由作者提供

数十年来,计算领域的大多数核心组件都使用C/C++作为实现语言,C/C++语言也长期维持着语言语法的标准。打造C/C++的替代品就像在所有的建筑工程完工之后改变房子的地基。

2C和C++完全控制我们所写的内容

在编写源代码时,C/C++可以自由地处理程序资源。例如,C/C++允许你直接分配/释放用于存储数据元素的物理内存。C/C++提供了一种使用本机操作系统级线程的方法,而不是像Go那样管理单独的并发运行时。

C/C++没有提供自动内存管理(垃圾回收)特性,因此程序员应该谨慎有效地防止内存泄漏。看看Meta的Folly库源代码是如何实现手动内存管理策略的:

Meta的Folly库使用了手动内存管理功能

自动内存管理和内存处理的限制无疑是使语言变得现代、高效和更抽象的好方法,但是这些特性会在语言运行时产生性能开销,并降低程序员的自由度。

C和C++不限制内存访问,提供手动的内存管理操作,让程序员按照自己的意愿控制程序,从而把自由给了程序员。当你用C/C++编写程序时,你的源代码将有效地执行你指示的操作,就是这样。

3C和C++确实又快又高效

但是,我们可以选择一个能够生成快速有效的二进制文件的编译器。GNU编译器生成特定于平台的二进制文件,而不嵌入专用的运行时环境。C编程执行模型使用crt0汇编指令段中定义的最小启动代码。看看下面的例子,Linux上的crt0部分:

在C语言中main函数之前执行的启动代码

C++无疑是一门复杂的语言,但它不像Python和Golang那样提供更高的抽象。此外,它还为你提供了一种使用首选标准语言版本(即C++14)进行编译的方法。因此,自现代C++特性使C++开发复杂化以来,你可以只使用C++中最小的特性。C++已经有30多年的历史了,并且从早期计算时代开始就对其性能进行了优化。

4C和C++是学术友好型语言

编写优化代码前需要知道的5件事

这些事实有助于您以优化的性能给硬件和程序员留下深刻印象

Rust无疑是一种很好的语言,具有内存安全、高性能和内置特性,但是Rust语法对于第一次编写代码的开发人员并不友好。对于工业用途来说,如果你的团队希望获得类似C语言的最小的高效代码和类似python的开发环境,Go是一种很好的语言。但是,对于学术用途来说,Go的抽象太过简单,并且不能与传统的伪代码保持一致,所以学术讲师永远不会用Go来替代C/C++。

为什么每个开发人员都应该使用C语言开始编程

你可以从任何一种语言开始编程——但是从C开始有更多的好处!

5现代替代方案仍然需要C,它们专注于不同的目标

如前所述,所有POSIX操作系统和非POSIX操作系统(即Windows)都提供了一个C库来处理内核操作,因此从C/C++调用内核特性很容易,因为我们不需要编写特定于语言的绑定或第三方包装器。一些操作系统甚至预先包含GNUC/C++编译器和调试器来促进C/C++的开发。如果我们使用Rust和Go,需要特定于语言的第三方绑定来与操作系统API通信。现代替代语言仍然提供了调用C代码的方法。例如,Go提供Cgo特性来调用C代码。

几乎所有的C/C++替代方案都力求用与C++截然不同的语言语法来提供缺少的C++特性。

如果程序员在寻找C/C++的替代方案,他们通常会期望一个平稳且耗时较少的迁移过程。

此外,他们也不期望学习一门新语言来为他们不喜欢的C/C++特性找到解决方案。

程序员们针对低层次编程用例设计和改进了C语言,没有一种现代语言是完全针对C语言的目标而创建的。C++使C语言更具有未来感,并自低级编程阶段进行了提升。Rust、Go、D和Carbon都是C/C++的备选品——而不是替代品,这些备选品都有自己的未来目标。

为什么每个程序员都应该在他们的职业生涯中学习C++

掌握C++并不是一件容易的事,但是一旦你做到了,你将获得无价收益

6结语

以前的程序员在C/C++进化时期书写了我们的计算机历史。他们用C和C++构建操作系统内核、编程语言、数据库系统、移动操作系统和网络软件。多亏了C/C++,现在几乎所有的现代Web服务都能工作。例如,最流行的Web服务器软件,如ApacheHTTP和Nginx,就是使用C/C++作为实现语言。

以前的程序员几乎用C/C++编写了所有流行的内部网络浏览器和网络软件组件。Web开发人员喜欢选择Java和Node.js用于Web服务,但Java和Node.js都是因C/C++而来的。

一些程序员认为像Rust、Go、D和Carbon这样的流行语言可以替代C/C++。同时,一些程序员考虑使用这些语言作为C/C++的备选品,认为它们在未来可能取代C/C++。这些现代语言是为特定的目的和需求而设计的——而不是取代C/C++。

微软创建了TypeScript,但我们仍然使用JavaScript。Jetbrains创造了Kotlin,但我们仍然使用Java。数以百计的C/C++备选品出现了,但程序员仍将使用C/C++,因为重写面向C/C++的计算机历史是不现实的。

这并不意味着C和C++是最好的语言——在某些方面(例如复杂性、内存安全性等),备选语言可能比C/C++更好,但它们无法进入C/C++的领域,因为以前的程序员用C和C++编写了整个现代计算机历史。

THE END
1.基于python的酒店管理系统的设计与实现.docx基于python的酒店管理系统的设计与实现.docx 18页内容提供方:黄橙文化 大小:744.02 KB 字数:约1.18万字 发布时间:2022-04-18发布于广东 浏览人气:694 下载次数:仅上传者可见 收藏次数:1 需要金币:*** 金币 (10金币=人民币1元)基于python的酒店管理系统的设计与实现.docx...https://max.book118.com/html/2022/0416/7012142145004112.shtm
2.酒店管理系统(QT/C++)大一期末设计赶工作品 简单文本操作非数据库https://www.iteye.com/resource/shr903988854-9914383
1.基于C++实现(控制台)仓库管理系统本仓库管理系统主要分为入库、出库、查询三大模块,分别对进货、出货和查询的操作进行管理。 在入库模块中,首先读入含进货信息的文件,进而对相应的商品信息进行修改 在出库模块中,首先读入含出货信息的文件,进而对相应的商品信息进行修改。其中有两种情况: 如果需求量大于仓库中商品的储存量,则拒绝该请求,保持仓库中该种...https://blog.csdn.net/s1t16/article/details/143732223
2....&课程设计&毕设项目:基于springboot+vue实现的酒店管理系统(含...在数字化时代,酒店行业也迎来了管理模式的深刻变革。为了提升运营效率、优化客户体验并增强市场竞争力,构建一套高效、易用的酒店管理系统显得尤为重要。本文将介绍如何结合Spring Boot后端框架与Vue前端框架,共同实现一个功能全面的酒店管理系统。 如需获取源码和观看运行以及配置视频,可通过下面地址访问观看 ...https://www.jianshu.com/p/4dd7c64fd9dd
3.基于QT酒店管理系统的设计与实现腾讯云开发者社区基于QT酒店管理系统的设计与实现 获取代码: (1) 下载链接: https://download.csdn.net/download/kese7952/87741597 (2) 添加博主微信获取,备注来源:mryang511688 项目描述 技术:C++、QT等摘要: 随着经济全球化的快速发展,人们的经济水平的得到了相当大得高,无论出差还是旅行,酒店在日常生活中的重要性就越来越...https://cloud.tencent.com/developer/article/2277938
4.archiveJAVA物业管理系统设计与实现(LW+源代码).zip 2024-10-26 19:03:58 积分:1 JAVA五子棋手机网络对战游戏的设计与实现(源代码+LW).zip 2024-10-26 18:57:48 积分:1 JAVA文件压缩与解压缩实践(源代码+LW).zip 2024-10-26 18:56:24 积分:1 ...https://www.coder100.com/index/index/content/id/3232134
5.软件毕业设计任务书五.设计内容 可自选题目,但须经过指导教师审查。 可选题目: 18. 文档管理系统 面向企业用户,研制开发一套文档管理系统,实现企业文档的存储、分类、维护、检索、授权等过程的全面管理。为用户主要提供如下功能: 1)登陆:用户通过浏览器登陆到系统,输入用户名和密码,登陆到系统,看到本用户所能看到的各类信息,包括文档...https://www.360wenmi.com/f/q281xnpltf1t.html
6.C++实现酒店管理系统C语言这篇文章主要为大家详细介绍了C++实现酒店管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用!【 如果你想靠AI翻身,你先需要一个靠谱的工具!】 本文实例为大家分享了C++实现酒店管理系统的具体代码,供大家参考,具体内容如下 一...https://www.jb51.net/article/219262.htm
7.系统可行性分析报告(11篇)3酒店管理系统的技术可行性分析 3.1对系统的简要说明 由于网络的普及,很多人都体会到网络带给我们的便捷,人们会通过网络信息来实现这些需求,这个系统基本设计思想就是把整个系统按照实现模块进行分解,利用ASP编程,数据库选用的是SQL Sever 20xx。开发出的系统具有库存酒店管理功能,能高效管理宾客住宿信息,统计每年、每月、...https://www.ruiwen.com/kexingxingbaogao/6145957.html
8.C++课程设计(简单图书管理系统)6篇(全文)组装与整体调试的全过程; (3)进一步熟悉C++中类的概念、类的封装、继承的实现方式;(4)学会分析简单的实际问题,并能利用所学的知识建立系统的逻辑结构,学会简单的调试技巧和方法。逐步熟悉面向对象程序设计的方法,养成良好的编程习惯。 2.要求基本要求: (1)要求利用C++面向对象的编程思想来完成系统的设计;(2)进行...https://www.99xueshu.com/w/fileiuknvdrv.html
9.酒店管理系统毕业论文开题报告由于本软件主要是为某小型宾馆定制开发的,因此针对该宾馆客房信息管理的实际工作而言,我们经过了反复地论证,最终确定了客房信息管理系统的设计方案。 四、系统功能详细描述: 1、住房登记功能 该功能实现了对客户信息的管理。该功能可以对客户信息进行增加、删除和修改。客户信息包括对信客户进行登记,登记内容包括房号、姓...https://www.unjs.com/z/1846074.html
10.深入浅出c语言c语言入门自学书籍都有哪些哈夫曼编码的实现、8皇后问题的实现、商人过河游戏、K阶斐波那契序列的实现、最短路径的实现等经典数据结构问题的解决;第4篇【项目实战】主要讲解实战前的项目规划以及5个项目的实战开发,包括通讯录、图书管理系统、简易网络通信系统、学生成绩管理系统、酒店管理系统等;第5篇【王牌资源】在DVD光盘中赠送了丰富的资源,...https://www.ultimate-communications.com/zh/language_419064
11.管理系统设计论文[1]米雨.中小型酒店管理系统的设计与实现[D].电子科技大学,20xx. [2]李刚.Struts2权威指南-基于WebWork核心的MVC开发[M].北京:电子工业出版社,20xx. [3]韩啸.同城经济型酒店管理系统的设计与实现[D].哈尔滨工业大学,20xx. [4]魏建华.基于查询的虚拟酒店管理系统开发[D].广东工业大学,20xx. 管理系统设计论文...https://www.yjbys.com/biyelunwen/fanwen/guanli/732322.html