在汇编里主要有三个操作:比较,跳转(goto),过程调用(call)。为什么说它是过程性的编程思想,值得你去好好的体会一下。...多态的出现,能够让同一组数据,在不同的阶段,用同一种表达方式,执行不同的操作。 在面向对象的程序设计中,我们便少不了容器。容器就用来存放一类有共同抽象概念的东西。这里说有共同概念的东西,而没有说对象。...大家都希望学的东西是可以用来赚钱的。而往往能够快速用来赚钱的都是一种应用技术像windows编程,linux编程,WEB开发等等。...然而如果你掌握了编程思想,那么那些应用技术将一通百通(因为应用技术往往都是对特定的一些函数的调用,通俗一点就是调用API,这些东西到专门的网站上查手册将一目了然,比如windows编程。...编程思想在我实践看来就是这样一个事情,很多代码你认真的都啊都啊,开始有很多不明白,他们为什么这么做,有的是不明白他们在干什么,有的是不明白他们为什么搞得这么别扭,慢慢的就了解编写过程中一些窍门。
我听说,Linux 上的任何东西都“只是一个文件”,所以让我们在 Linux 上打开一个文件。...我们谈下为什么不能修改 intmax_t,因为如果我们从 long long(64 位整数)改为 __int128_t(128 位整数),某些二进制文件就会无所适从,使用错误的调用约定 / 返回约定。...这取决于你暴露类型的方式。 C 语言真正奇妙的其中一个功能是,它让你可以区分布局已知的类型和布局未知的类型。...如果有多个东西基于你的库构建,它们在类型不透明的情况下相互调用,就会出现糟糕的情况: lib1:开发一个 API,使用类型 MyRadType* 调用 use_val; lib2:调用 make_val...这就是为什么 int 在 x64 上是 32 位的,尽管它“应该”是 64 位的:int 长期以来都是 32 位,以至于将软件升级到新的大小完全无望,尽管它是一个全新的架构和目标三元组。
“它与你在 Mac 和 Linux 上获得的体验非常相似,”Lloyd 说,“最大的区别在于它支持 PowerShell,它支持 Git Bash,[并且] 如果你想使用 Linux 的 Windows...Lloyd 指出,Warp 花费了“大量时间”来“无缝地与所有这些东西交互,方式与 Windows Terminal 类似,你可以在不同的 shell 环境中启动会话。”...“我们进行所有自己的图形调用;我们必须与 Windows 上的图形驱动程序和事件处理以及所有这些东西集成,”Lloyd 说。它还与 Windows 包管理器 WinGet 集成。...“我们一直在与 Windows 终端团队以及各个工程团队的人员合作,以确保该产品对 Windows 开发人员来说非常棒,”Lloyd 补充道。 为什么要更换终端?...“所以,例如,你不能点击并将鼠标光标放在普通终端中的某个位置。在 Warp 的终端中,输入编辑器的工作方式就像你在 IDE 或其他东西中一样。它是一个真正的代码编辑器。
1、如何理解在Linux中一切皆文件?...1.1 概述 在windows中是文件的东西,在linux中也是文件;其次一些在windows中不是文件的东西,比如进程、磁盘、显示器、键盘这样硬件设备也被抽象成了文件,你可以使用访问文件的方法访问它们获得信息...这有助于实现资源的共享和保护,提高了系统的安全性和可靠性。 这样做最明显的好处是,开发者仅需要使用一套API和开发工具,即可调取Linux系统中绝大部分的资源。...文件系统以分区为单位,不同的分区可以是不同的文件系统。对于Super Block,一个分区内的多个组中一般只有几个组中存在,且都是一样的,这样做的目的为了备份,防止一整个分区都挂掉。...Linux不允许对目录新建硬链接。 2、为什么要有软硬链接? 软链接最大的作用就是以最简单的方式,快速定位一个文件或目录。 硬链接可以做文件备份。 .和..就是硬链接。 unlink:删除软链接。
如果你用过 linux 命令或者 c 的函数库,你会发现这些 api 在命令和 c 函数库中也都是这个名字。 为什么会这样呢?这些 api 是什么标准么?...因为不同操作系统如果提供的函数和系统调用不一样,那么基于操作系统的上层应用程序的源代码就不一样,这就导致了一个平台写的代码没法在另一个平台上编译。 怎么办呢? 如果每个操作系统提供的 api 一样呢?...POSIX 最早是 unix 扩展而来,linux 实现了这个 POSIX 的标准,而后来 windows 迫于压力,也不得不兼容了 POSIX 标准,不然很多 linux 的应用程序在 windows...Java 的 JRE(java runtime) 也提供了操作系统能力的抽象,但是那些 api 却和操作系统 POSIX 的 api 关系不大,而且融入了很多设计模式的东西,比如 io 流的装饰器模式。...POSIX 标准使得应用程序在源码层面是可以跨平台移植的,分别在不同平台做编译即可。 POSIX 是 ISO 承认的国际化标准,最早是由美国的一个标准协会 IEEE 提出的。
实际上,它只是几个工具的简易组合,没有什么创新的地方(甚至不支持多轮聊天,只支持英文),但 talkGPT4All 有下面几个比较好的特点 所有算法本地运行,不涉及API的调用,避免了国内无法访问OpenAI...想体验的朋友可以参考 GitHub README进行快速安装,也可以在这篇文章中跟着我一步步来进行。 2. 为什么造这个轮子 聊天机器人是我比较喜欢的一个应用,机器+人类的思维是一个很有意思的场景。...在ChatGPT 开放API后,有人做了一个MacOS上的基于OpenAI API的语音聊天机器人talkGPT,简单好用,唯一的问题是需要借助OpenAI API,目前国内是不太好访问的。...后续改进思路 目前实现还是比较粗糙,计划后续会增加下面的功能(按实现难度从低到高排列): 验证 Linux,Mac Intel 和 WSL2 下能否正常运行 增加多轮对话支持 增加中文支持 去掉编译好的二进制程序...,包含 llama.cpp 源码,自行编译,支持更灵活的使用 更多效果更好模型的添加 欢迎基于这个仓库进行修改和代码分发,期待创造出更有新意、更有应用价值的东西~
比如 exit fork read open close …… 2, 对Windows来说,操作系统提供给应用程序的接口不是系统调用,而是API。比如:ReadFile。...我们暂时把API和系统调用等同起来 3, Linux中,每个系统调用对应一个系统调用号,内核维护了一个系统调用表,通过这张表可以找到对应的系统调用函数。...用户态要切换到内核态,操作系统一般是通过中断来完成 3, Linux使用0x80中断作为系统调用的入口,Windows采用0x2E号中断作为系统调用入口 4, 中断是一个硬件或软件发出的请求,要求CPU...5, 中断一般有两个属性,中断号和中断处理程序。不同的中断有不同的中断号,也对应不同的中断处理程序。...5, 切换堆栈: (1) 在执行中断处理函数之前,CPU首先还要进行栈的切换。 (2) 在Linux中,用户态和内核态使用的是不同的栈,两者各自负责各自的函数调用。
,在这种情况下,程序会立即终止……否则可能会看到“Memory allocated”(如果有 1 TB 的内存可分配), 在 macOS/clang 和 Linux/GCC 下,有时候会打印“Memory...执行“malloc(x)”与占用 x 字节的物理内存不同。因此,依靠 malloc 确定分配是否成功是一个困难的问题。只有在写入和读取新分配的内存时才能发现。...Windows 不允许过量使用(但仍使用相同的虚拟/物理内存设计)。Linux 有 3 种过量使用模式,启发式(默认)、始终和从不。...,内存不足killer可能会在进程尝试真正访问过度分配的虚拟内存时选择杀死一个*不同的*进程,并且C 共享库可能不会*真正* 释放 free() 的内存,因为在下次尝试 malloc() 时保留它以避免访问内核会更快...,并且这些东西都不是在标准中一成不变的,这一切都可能已经过时了几年......
类的构造函数如下: XTcp::XTcp() { // 初始化库,如果不初始化的话会直接导致后面的socket函数无法使用,但是在初始化前 // 要加载Windows的网络库,就是在项目属性那里加ws2...因为默认情况下connect是阻塞的,在connect发起的三次握手(是的,调用accept的时候三次握手已经完成了)结束之后才会返回值,因为握手不是瞬间就完成的,所以会需要设定延时功能,但是问题就在这里了...,Windows下的延时和Linux下的延时好像是实现的效果是不一样的,哪怕设置相同。...在非阻塞工作模式下,调用connect会立即返回EINPROCESS错误(或者0,即成功建立连接,但是通常不可能,除非连接的是本机),但是三次握手其实还在进行,所以需要使用select来检查连接是否建立成功...之所以能用select这么做就是因为连接成功建立的时候,描述字变为可写(记住,Linux中所有的东西都被当成文件处理,socket也是),select会在数组中某个描述字变为可写的时候返回该描述字的值。
2)Java AIO又称为NIO 2.0,难道它也是基于NIO来实现的? 3)Netty为什么会舍去了AIO的支持?(点此查看); 4)AIO看起来貌似只是解决了有无,实际是发布了个寂寞?...7.1概述 先说一下结论:所谓监听回调的本质,就是用户态线程调用内核态的函数(准确的说是API,例如read、write、epollWait),该函数还没有返回时,用户线程被阻塞了。...当函数返回时,会唤醒阻塞的线程,执行所谓回调函数。 对于这个结论的理解,要先引入几个概念。 7.2系统调用与函数调用 函数调用:找到某个函数,并执行函数里的相关命令。...8.2Java AIO的其它真相 Java AIO跟NIO一样:在各个平台的底层实现方式也不同,在Linux是用epoll、Windows是IOCP、Mac OS是KQueue。...Linux虽然也有一套原生的AIO实现(类似Windows上的IOCP),但Java AIO在Linux并没有采用,而是用epoll来实现。 Java AIO不支持UDP。
这是一个很难简短回答的问题(除了直接说“是”和“否”),因为理解答案需要您掌握 Crossplane 的新颖之处和不同之处,以及它没有的新颖之处和不同之处。...mkdir 符合以下方式: 通过使用来使两个软件组件进行通信 [shell 和 Linux API] 的 一组定义 [mkdir 的标准标志] 和 协议 [shell 标准输入/输出和退出代码] 几乎所有代码都是调用...从技术上讲,代码是“一直都是 API”。但如果它本质上描述了所有代码,那么这不是一个非常有用的定义。 一直都是 API:Linux API 调用 mkdir 以创建文件夹。...有人可能会争辩说 mkdir 不是 API,因为它是由人类使用的,而不是用于“两个软件组件进行通信”。...如果 Windows API 发生故障(并且你支付了支持费用),那么你可以致电 Microsoft 支持,但 Windows API 不需要网络连接即可调用。
如果您之前就一直在考虑迁移到Linux的事情,那么就是现在了。 ? 选择您的发行版 与Windows和macOS不同,Linux并不只有一个版本。...Linux被打包成许多不同的发行版,每个发行版都有自己的界面和功能集。一个可能会使用带有dock和“应用程序商店”的类似Mac的界面,而其他人可能会使用更简约的界面,并需要从命令行安装应用程序。...探索Linux发行版的乐趣是很多人业余爱好的一部分,但是如果是您的首次安装,您可能会想要一些对初学者友好的东西,因此在需要时可以轻松获得帮助。这就是为什么我建议从Linux Mint开始的原因。 ?...备份数据,重新启动计算机:现在是时候安装Linux了。 ? 在您的PC上安装Linux 在计算机重新启动时,您应该看到一条消息,提示您按某个键来访问“启动菜单”(通常是F12之类的东西)。...或者,您可以将驱动器分为两个分区,并在Windows和Windows上同时启动Linux。 这将允许您在需要时重新启动到其中一个。因为Windows 7不安全,因此您可能不想在那里花费太多时间。
Windows 程序,并利用 Wine 的调试工具,来揭开 Wine 将 Windows API 调用转换为 Linux 系统调用的神秘面纱。...Wine(Wine Is Not an Emulator,即 Wine 不是模拟器)是一个能够在多种 POSIX 兼容操作系统(如Linux、macOS 和 BSD)上运行 Windows 应用程序的兼容层...通过设置不同的通道(channel)和严重性(severity),可以获取特定模块的详细信息。 要追踪我们的 hello.exe 程序中所有 API 调用的情况,可以使用 relay 通道。...relay 通道会记录下程序对 Win32 API 函数的每一次调用。...提供的强大调试和追踪工具,你可以清晰地观察到 Wine 将 Windows API 调用转换为 Linux 等价实现的全过程。
Wine 项目也给出了解释: 可以做的事 以下是一些被认为对 Wine 贡献者来说是安全的做法: ✅: 在尝试理解某个 Windows API 函数时,可以编写一个测试程序来验证其行为,并将其贡献到 Wine...值得一提的是,ReactOS 不是基于 Linux,而是一个从零开始编写的操作系统内核和用户态组件,力求在架构上与 Windows NT 系列(如 Windows XP/Server 2003)兼容。...因为这其中存在巨大的版权风险: 逆向工程方式 ReactOS 的部分实现是通过对 Windows 进行 逆向工程 得到的,比如分析 Windows 的行为、API 调用、甚至二进制接口。...比如 GetSystemMetrics(SM_CXVSCROLL) 这个 API: 逆向方式:直接看 Windows 源码或反汇编,知道它返回了一个固定常量值(比如 17)。...黑盒方式:只能写程序跑 Windows,然后调用 API 打印结果,再在不同环境下测试,看是不是固定值,或者和 DPI/主题有关。
之前在知乎看见一个问题,问为什么还有985高校给大一上 C 语言课,如下: ? 原问题 不过这个提问方式未免有引战嫌疑,所以被知乎管理员编辑为如下问题: ?...所以这种语言完全没必要开一学期的课来学,倒是非常适合放在计算机导论课程中,成为其中一个章节。...堆栈 理解不同的内存分配和管理方式,一种编译器自动管理,一种是手动管理。 函数调用栈、返回值 理解函数调用的本质,即跳转指令,理解返回值是怎么返回的。...)究竟是什么 Linux 内核和 C 标准库提供了哪些能力 Linux 的系统调用是怎样实现的 都有哪些系统调用,如何使用 其它诸如mutex、signal、select、epoll、ipc、socket...这种东西学习下概念和思想就好了,这些东西根本就是应用层的东西,学习起来根本不费劲的好吧。 我敢保证,没有一个 985 会教微服务这种东西,分布式理论倒是可能会单独开一门课。
在使用CRT的过程中,你还需要了解的是: 1、CRT的一些组成部分也调用了Windows API。...它们也可以作为一个C/C++库在其他操作系统平台上使用。还有一部分,则是和Windows紧密绑定的,调用Windows API来实现的,可以看作扩展的CRT。...就象C++编译器用来编译用C++写的编译器自身一样,Windows(及其上的编译器)用来作为平台开发和编译CRT,并也用CRT来写Windows自身(当然第一个CRT和第一个用来编译Windows的编译器不是在...或者以另一种模式发布另一个库(只是我在原来那个库上开发的一个产品,由于我独立地发布这个新库,许多人会不知道这个新库与旧库的关系。...在linux下, 这个操作系统用到的crt的子集称为klibc, 在windows下, 称为ntcrt;而基于操作系统的完整实现在linux下为glibc, 在windows下称为 msvcrt。
注:你也许会很奇怪为什么下面的东西很偏Unix/Linux,这是因为我觉得Windows下的编程可能会在未来很没有前途,原因如下: 现在的用户界面几乎被两个东西主宰了,1)Web,2)移动设备iOS或Android...Windows的图形界面不吃香了。 越来越多的企业在用成本低性能高的Linux和各种开源技术来构架其系统,Windows的成本太高了。 微软的东西变得太快了,很不持久,他们完全是在玩弄程序员。...Source Insight (或 ctag) 使用这些东西不是为了Cool,而是这些编辑器在查看、修改代码/配置文章/日志会更快更有效率。...3、 熟悉Unix/Linux Shell和常见的命令行 如果你用windows,至少学会用虚拟机里的linux, vmware player是免费的,装个Ubuntu吧 一定要少用少用图形界面。...学习(麻省理工免费课程)计算机科学和编程导论 学习(麻省理工免费课程)C语言内存管理 学习Unix/Linux系统调用(Unix高级环境编程),,了解系统层面的东西。
哪怕我能买得起, 什么东西运到芬兰, 往往会需要很长的时间。 我不愿等上那么久, 因此我四处搜求一个能从FTP地址上直接下载的版本。 没有人给我提供能找到POSI标准的来源。...库函数调用与系统无关,不同的系统,调用库函数,库函数会调用不同的底层函数实现,因此可移植性好。 4. 程序的可移植性及其本质 那么目标代码和启动代码是怎么生成的呢?答案是编译器。...我们只能在代码层去思考可移植问题,在API层面上由于各个操作系统的命名规范、系统调用等自身原因,在API层面上实现可移植也是不大可能的。...如今,语言的跨平台的程序都是以这样的方式实现的。但是在不同的平台下,仍需要重新编译。 5. 系统开销 使用系统调用会影响系统的性能,在执行调用时的从用户态切换到内核态,再返回用户态会有系统开销。...而对于第三方的库,它其实和系统库一样,只是它直接利用系统调用的可能性要小一些,而是利用系统提供的API接口来实现功能(API的接口是开放的)。 四、举例 如下图是Linux系统调用的大概流程。
已经有现成的库了为什么不直接使用呢? 第一,项目中可能只需要用到Tesseract的几个C++ API而已,直接引用一大堆东西没有必要。...vcpkg通过提供预编译的二进制包和源代码,使开发者能够在Windows、Linux和macOS等操作系统上轻松安装和管理C++库。...这样可以确保这些函数在C语言中也可以被正确调用。简单的说std::string不是C语言风格的,所以不行。 在C#项目中调用C++ DLL 新建一个C#控制台项目用于测试。...C#的 string 类型是一个托管的字符串对象,而 char* 是一个非托管的指针,直接进行转换会导致运行时错误或无法预期的行为。...这样可以确保你在C#中能够正确处理C++函数返回的字符串指针。