了解运行时:从 C 语言到现代语言

了解运行时:从 c 语言到现代语言

在现代软件开发和编程时代,术语“运行时”可能有不同的含义,具体取决于上下文和所讨论的语言。我在这里澄清这些差异,重点关注与 java 或 python 等更现代的语言相比,c 语言的运行时如何工作。我打算让这篇文章主要针对初学者程序员,因此我将避免深入研究复杂的概念。

什么是运行时?

运行时的核心是一个程序本身,它读取并执行开发人员编写的代码。但当一些开发人员使用 c 语言运行时时,就会感到困惑。

现代语言运行时

在java或python等语言中,运行时本身就是一个读取myfile.js文件的程序,这就是为什么你运行nodejs程序,例如:node myfile.js和v8引擎(是javascript引擎,它解析并执行javascript代码。)管理它的一切,无论你创建一个新文件,启动一个子进程等等,最重要的是你不能做任何 v8 不允许你做的事情。
但是当你运行一个c程序时,你不需要执行c myfile.c,你只需要编译一次,现在你不再需要gcc了,直接运行它即可。

c“运行时”

在 c 中,没有像 java 或 python 那样与代码一起运行的单独程序。相反,通常所说的c“运行时”实际上是一组在编译期间添加的静态插入的代码和指令。它是最终二进制文件中包含的最小指令集,用于处理 cpu/操作系统级别的某些必要任务。它处理函数调用的堆栈帧创建和拆卸(在汇编中使用 push、pop、call、ret 等指令)。即使这一点也可以通过使用内联汇编提供您自己的 __start 函数来覆盖,从而使开发人员能够完全控制程序的入口点和初始化。

void __start() {// custom entry point, no standard library initialization// you have no access to argc and argv here unless you access them manually from registers// you can create you own custom stack setup, initialization and etc here.// exit directly using a syscallasm("mov $60, %rax; mov $0, %rdi; syscall"); // exit(0) syscall}

这看起来根本不像运行时,它只是编译器添加的一些汇编语言代码,因此开发人员不必这样做。

云雀语言模型 云雀语言模型

云雀是一款由字节跳动研发的语言模型,通过便捷的自然语言交互,能够高效的完成互动对话

云雀语言模型 54 查看详情 云雀语言模型

c的权力与责任

在 c 语言中,您可以使用内联汇编直接调用系统调用,以操作系统通常不允许的方式与内核交互,这就是恶意软件的创建方式。内联汇编允许开发人员在 c 代码中编写汇编语言指令。这通常用于性能关键的代码或访问特定的硬件功能。

c 中的内联汇编

内联汇编允许开发人员在 c 代码中编写汇编语言指令。这通常用于性能关键的代码或访问特定的硬件功能。它提供了一种直接执行cpu指令的方式。

与内核直接交互

使用内联汇编,程序员可以直接调用系统调用,而无需通过更高级别的库。 例如,我们可以使用内联汇编为系统调用设置适当的参数寄存器,然后触发它。由于内联汇编允许对系统资源进行低级控制,因此它可以用来绕过安全机制或直接操纵内核。这就是恶意软件执行未经授权的操作的方式,例如访问受保护的内存、拦截系统调用或操纵进程及其内存。恶意软件可以利用操作系统中的漏洞或使用这些低级交互来执行键盘记录、权限升级或秘密操作等任务。

linux c中有一个flag,允许您直接将文件数据写入存储设备,绕过一些内核的缓存机制,称为o_direct标志,它与open和write系统调用结合使用。该标志确保数据不会在 ram 中缓冲或由内核在内核空间中管理,这会直接将数据写入硬盘,jvm 不允许您这样做,这只是一个简单的示例。
这是一个简单的例子:

asm volatile ("syscall": "=a" (written): "0" (1),"D" (fd),"S" (buffer),"d" (BLOCK_SIZE): "rcx", "r11", "memory");

*注意:* (writing) 是在 main() 内部创建的变量,(1) 是 write 的系统调用号,(fd) 是文件将被写入的位置,即 int fs = open(“path .log”,o_wronly; (block_size) 是另一个变量名。它比那更复杂。

运行时的演变

重要的是要了解运行时的概念多年来一直在发展。 70 年代的 c“运行时”与我们在 2000 年代的语言中看到的健壮的运行时环境有很大不同。在讨论运行时时,这种演变可能会导致混乱,尤其是在熟悉不同编程时代的开发人员之间。

结论

我认为人们现在正在将 1970 年代的运行时与 2000 年代的运行时进行比较,这让新开发人员与老开发人员感到困惑。
解决特定问题是任何编程语言的主要任务,你不想用 c 编写一个完整的框架来创建 api,我们有 nodejs,它很擅长,你不需要用 javascript 编写裸机代码,因为我们已经有了 c 并且它在这方面非常棒。为什么要重新发明轮子,让我们用轮子创造一辆神奇的汽车,除非你不想在火星上驾驶它。

以上就是了解运行时:从 C 语言到现代语言的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/457620.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
俄罗斯引擎入口首页不登录 俄罗斯引擎搜索入口无需登录网站
上一篇 2025年11月8日 02:08:37
消息称英特尔 Arrow Lake 核显采用Xe-LPG+架构,且支持AI引擎XMX
下一篇 2025年11月8日 02:08:42

相关推荐

  • Java PreparedStatement

    大家好,很高兴再次与大家见面,我是你们的老朋友全栈君。 Java PreparedStatement与Statement类似,是Java JDBC Framework的一部分。它用于对数据库执行CRUD操作。PreparedStatement扩展了Statement接口。由于支持参数化查询,Prep…

    2026年9月23日
    2500
  • 如何使用AutoKeras训练AI大模型?自动构建神经网络的指南

    AutoKeras在AI大模型训练中扮演“智能建筑师”角色,通过自动化神经架构搜索与超参数优化,加速模型开发迭代。它基于Keras/TensorFlow,支持图像、文本、结构化数据任务,提供ImageClassifier、TextClassifier等接口,用户只需设定max_trials和epoc…

    2026年9月23日
    300
  • Linux用户和权限管理的安全最佳实践

    最小权限原则要求用户和进程仅拥有必要权限,避免赋予root权限,通过sudo提权并限制命令,服务账户禁止登录且权限最小化;定期审查sudoers文件,删除无用账户,禁用root直接登录,强密码策略由pam_pwquality实现,usermod -s /sbin/nologin限制服务账户登录;文件…

    2026年9月23日
    500
  • mysql如何进入编辑模式 mysql输入sql语句创建数据库

    mysql如何进入编辑模式 mysql输入sql语句创建数据库mysql如何进入编辑模式 mysql输入sql语句创建数据库mysql如何进入编辑模式 mysql输入sql语句创建数据库mysql如何进入编辑模式 mysql输入sql语句创建数据库

    创建mysql数据库需登录后执行sql语句;避免sql注入用参数化查询、输入验证、最小权限原则、waf;解决乱码需统一客户端、数据库、表编码为utf8mb4;优化查询性能可通过索引、explain分析、避免select *、使用join、分页优化、定期维护、硬件升级、缓存。 想要用MySQL创建数据…

    2026年9月23日 用户投稿
    1500
  • Asianux 7.3安装Oracle 11.2.0.4单实例体验

    在asianux 7.3环境中安装#%#$#%@%@%$#%$#%#%#$%@_a189c++633d9995e11bf8607170ec9a4b8 11.2.0.4单实例的具体步骤和注意事项如下: 环境:Asianux 7.3 需求:安装Oracle 11.2.0.4 单实例 背景:系统使用默认的…

    2026年9月23日
    300
  • 如何在Krita中使用AI裁剪图片?快速掌握高效图像裁剪技巧

    如何在Krita中使用AI裁剪图片?快速掌握高效图像裁剪技巧如何在Krita中使用AI裁剪图片?快速掌握高效图像裁剪技巧如何在Krita中使用AI裁剪图片?快速掌握高效图像裁剪技巧如何在Krita中使用AI裁剪图片?快速掌握高效图像裁剪技巧

    Krita虽无内置AI裁剪功能,但可通过其构图辅助线、选区与变换工具实现“智能”裁剪,并结合外部AI工具完成内容扩展与智能构图,形成高效工作流。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ Krita本身,作为一款强大的开源数字绘画与图像…

    2026年9月23日 用户投稿
    200
  • 在Loom中利用虚拟线程实现递归任务:告别ForkJoinPool的限制

    本文探讨了Java Loom中RecursiveAction和RecursiveTask与虚拟线程的兼容性。由于它们设计上依赖于ForkJoinPool及其特定的工作线程,无法直接与虚拟线程配合使用。文章提供了两种替代方案:一是利用CompletableFuture结合虚拟线程工厂实现自定义递归任务…

    2026年9月23日
    500
  • 《蝎之尾》攻略——游戏配置要求介绍

    《蝎之尾》(tail of scorpios)是由jabberworks打造的一款设定在架空历史背景下的悬疑推理类视觉小说游戏。该游戏不仅剧情引人入胜,画面表现也相当出色,同时对设备的硬件要求较为亲民,最低仅需1.6ghz单核的intel或amd处理器即可运行。 《蝎之尾》最低配置要求如下: 操作系…

    2026年9月23日
    200
  • CodeIgniter 动态多数据库连接与数据导入实践指南

    本文详细介绍了在 CodeIgniter 框架中,如何根据用户输入的动态数据库凭证建立并管理第二个数据库连接。通过构建自定义连接配置数组,并利用 CodeIgniter 的数据库加载机制,开发者可以灵活地切换数据库实例,从而实现从外部数据库导入数据到主数据库的功能,提升应用的灵活性和数据处理能力。 …

    2026年9月23日
    000
  • VSCode如何管理技术债务 VSCode代码质量跟踪的实用方法

    eslint、pylint等linter类扩展可实时识别代码问题,从源头减少技术债务;2. sonarlint能集成sonarqube规则,深度检测代码异味并提供修复建议;3. code metrics可量化函数圈复杂度等指标,帮助定位高风险代码;4. todo tree将todo、fixme等注释…

    2026年9月23日
    000
  • 谷歌浏览器如何更改界面语言_谷歌浏览器界面语言修改方法

    1、打开谷歌浏览器设置,添加简体中文并设为显示语言,重启生效;2、在macOS语言与地区中将中文拖至首选语言顶部以同步系统设置;3、若未生效,可清除Chrome的Preferences缓存文件重置配置。 如果您在使用谷歌浏览器时希望将其界面语言更改为其他语言,可能是因为系统默认语言不符合您的使用习惯…

    2026年9月23日
    000
  • Kafka 精妙的高性能设计(上篇)

    Kafka 精妙的高性能设计(上篇)Kafka 精妙的高性能设计(上篇)Kafka 精妙的高性能设计(上篇)Kafka 精妙的高性能设计(上篇)

    kafka 的高性能设计可以说是无微不至,从生产者(producer)、到代理(broker)、再到消费者(consumer),kafka 在每一个细节上都精心优化,最终实现了极致的性能。 本文将首先带领大家建立高性能设计的思维模式,然后深入探讨 Kafka 的高性能设计方案,最终帮助大家系统地掌握…

    2026年9月23日 用户投稿
    100
  • mysql安装后怎么可视化 mysql图形界面工具安装使用

    mysql安装后怎么可视化 mysql图形界面工具安装使用mysql安装后怎么可视化 mysql图形界面工具安装使用mysql安装后怎么可视化 mysql图形界面工具安装使用mysql安装后怎么可视化 mysql图形界面工具安装使用

    要更方便地操作 mysql 数据库,推荐使用图形界面工具。常见的有:1. mysql workbench(官方工具,功能全面)2. navicat for mysql(商业软件,界面简洁,功能丰富)3. dbeaver(开源免费,跨平台支持)4. phpmyadmin(基于 web,适合 php 环…

    2026年9月23日 用户投稿
    300
  • Linux用户认证与授权机制解析

    Linux通过认证与授权机制保障系统安全,先验证用户身份,再控制资源访问。1. 用户认证包括密码、PAM、SSH密钥等方式,由login或sshd调用PAM模块完成;2. 用户与组管理基于UID和GID,通过/etc/passwd、/etc/group、/etc/shadow文件实现,使用usera…

    2026年9月23日
    000
  • 为什么macOS系统被认为比Windows更少受到病毒和恶意软件的困扰?

    macOS受病毒困扰较少因用户基数小、系统架构安全、生态封闭及用户习惯好,但威胁正随市场份额增长而增加。 macOS系统相对较少受到病毒和恶意软件的困扰,这背后有多重因素共同作用,并非单一原因。虽然近年来针对Mac的威胁确实在增加,但整体感染率仍低于Windows平台。 用户基数与攻击目标 黑客开发…

    2026年9月23日
    800
  • 如何解决Linux软件包冲突 yum和apt依赖问题处理方案

    如何解决Linux软件包冲突 yum和apt依赖问题处理方案如何解决Linux软件包冲突 yum和apt依赖问题处理方案如何解决Linux软件包冲突 yum和apt依赖问题处理方案如何解决Linux软件包冲突 yum和apt依赖问题处理方案

    处理linux软件包冲突的核心方法是利用包管理器自带修复机制并手动干预。1. 清理缓存与元数据,重新更新以解决临时错误;2. 使用跳过损坏包、强制重装等方式尝试自动修复;3. 禁用或调整第三方仓库优先级以避免冲突源;4. 手动安装特定版本依赖或卸载冲突包;5. 对于apt系统,使用–fi…

    2026年9月23日 用户投稿
    500
  • 关于java打包成jar在linux上运行的一些问题「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。 关于将Java项目导出为可运行的jar文件,请参考下图: 如果在Linux上运行时,前两个选项导出的jar包报错,提示找不到依赖包,那么建议使用第三个选项。这个选项会生成一个jar包和一个文件夹,文件夹内包含jar包的所有依赖。将这两个文件一起上传到Linu…

    2026年9月23日
    000
  • VSCode如何配置生物信息开发环境 VSCode基因组数据分析工作流

    vscode在生物信息学中的核心配置是通过安装python、r、remote-ssh/containers/wsl等扩展,结合conda管理环境,实现多语言支持与远程开发;2. 处理大规模基因组数据时应避免直接打开大文件,而是通过集成终端调用命令行工具(如samtools、bcftools)在远程服…

    2026年9月23日
    000
  • mysql如何输入注释 mysql写sql代码的格式规范

    mysql如何输入注释 mysql写sql代码的格式规范mysql如何输入注释 mysql写sql代码的格式规范mysql如何输入注释 mysql写sql代码的格式规范mysql如何输入注释 mysql写sql代码的格式规范

    在mysql中,单行注释使用–(后跟空格)或#,多行注释使用/*…*/。1. 注释应解释“为什么”而非“是什么”,单行注释推荐使用–,#常用于脚本开头;2. 多行注释适用于复杂逻辑说明或版权信息;3. sql格式规范包括关键词大写、统一缩进、合理换行与逗号放置,以…

    2026年9月23日 用户投稿
    400
  • go 语言版本控制器

    管理不同版本的go语言环境是一项繁琐的任务,尤其是当需要为每个go特性单独安装go环境时。为了简化这一过程,我们需要一个版本管理工具来统一管理go环境。以下是关于go版本控制器g的详细介绍。 一、Go版本控制器g简介 g是一个适用于Linux、macOS和Windows的命令行工具,旨在提供一个方便…

    2026年9月23日
    000

发表回复

登录后才能评论
关注微信