
C语言
文章平均质量分 82
旅之灵夫
【授人以渔】
【要站在巨人的肩上】
【没有做不到,只有想不到】
【人的脑子是一个有限的空间,所以必须选择性的吸收知识,而不能把什么东西都放进去。--柯南·道尔】
展开
-
【C|图解指针变量】【转载】
作者:一口Linux。原创 2024-03-04 14:25:38 · 885 阅读 · 0 评论 -
【400 行 C 代码实现一个虚拟机】【转载】
虚拟机就像计算机(computer),它模拟包括 CPU 在内的几个硬件组件,能够执行 算术运算、读写内存、与 I/O 设备交互。最重要的是,它能理解机器语言(machine language),因此可以用相应的语言来对它进行编程。一个虚拟机需要模拟哪些硬件要看它的使用场景。有些虚拟机是设计用来模拟特定类型的计算设备 的,例如视频游戏模拟器。现在 NES 已经不常见了,但我们还是可以用 NES 硬件模拟器来玩 NES 游戏。这些模拟器必须能忠实地 重建每一个细节,以及原硬件的每个主要组件。原创 2024-02-27 22:35:54 · 1166 阅读 · 0 评论 -
【 C 语言实现的开源“操作系统”】【转载】
Tetris-OS,从名字上就能看出来,这是一个可以用来玩俄罗斯方块的操作系统,而且只能用来玩俄罗斯方块,其他事都干不了。它的开发者 jdah 是一名俄罗斯方块的狂热者,很早就有了想拥有一个只运行俄罗斯方块操作系统的想法。Tetris-OS 不管理文件、控制进程之间的通信或处理登录。实际上,这是一个在引导加载程序中运行的俄罗斯方块的版本,在你的计算机上运行任何磁盘(或者是 ISO 文件)中的一个小空间。其实 20 世纪 80 年代和 90 年代的许多游戏磁盘都包含自己的“操作系统”。原创 2024-02-27 21:50:47 · 380 阅读 · 0 评论 -
【手写线程池 - C 语言版】【转载】
/ 线程池结构体// 任务队列// 容量// 当前任务个数// 队头 -> 取数据// 队尾 -> 放数据// 管理者线程ID// 工作的线程IDint minNum;// 最小线程数量int maxNum;// 最大线程数量// 忙的线程的个数// 存活的线程的个数// 要销毁的线程个数// 锁整个的线程池// 锁busyNum变量// 任务队列是不是满了// 任务队列是不是空了// 是不是要销毁线程池, 销毁为1, 不销毁为0dobreak;原创 2024-02-21 22:02:25 · 810 阅读 · 0 评论 -
【C++ std::thread说明】【转载】
C++11 之前,C++ 语言没有对并发编程提供语言级别的支持,这使得我们在编写可移植的并发程序时,存在诸多的不便。现在 C++11 中增加了线程以及线程相关的类,很方便地支持了并发编程,使得编写的多线程程序的可移植性得到了很大的提高。C++11 中提供的线程类叫做,基于这个类创建一个新的线程非常的简单,只需要提供线程函数或者函数对象即可,并且可以同时指定线程函数的参数。原创 2024-02-21 21:36:17 · 1068 阅读 · 0 评论 -
【C语言线程库的使用】【转载】
线程是轻量级的进程(),在 Linux 环境下线程的本质仍是进程。在计算机上运行的程序是一组指令及指令参数的组合,指令按照既定的逻辑控制计算机运行。操作系统会以进程为单位,分配系统资源,可以这样理解,进程是资源分配的最小单位,线程是操作系统调度执行的最小单位。先从概念上了解一下线程和进程之间的区别:进程有自己独立的地址空间,多个线程共用同一个地址空间线程更加节省系统资源,效率不仅可以保持的,而且能够更高在一个地址空间中多个线程独享:每个线程都有属于自己的栈区,寄存器 (内核中管理的)原创 2024-02-21 20:03:12 · 789 阅读 · 0 评论 -
【编写可移植 C/C++ 程序的一些要点】【转载】
这一点是建立在分层设计之上的,大多数底层函数,像线程、同步机制和IPC机制等等,不同平台提供的函数,几乎是一一对应的,封装这些函数很简单,实现Adapter的工作几乎只是体力活。然而,对于一些比较特殊的应用,如图形组件本身,就拿GTK+来说吧,基于X Window的功能和基于Win32的功能,两者差巨大,除了窗口、事件等基本概念外,几乎没有什么相同的,如果不事先了解各个平台的特性,在设计时就精心考虑的话,抽象出来的抽口在另外一个平台几乎无法实现。这些貌合神离的东东,端的是神出鬼没,一不小心着了它的道。原创 2024-02-20 22:33:32 · 818 阅读 · 0 评论 -
【C/C++ 学习路线】【转载】
前言于我而言,最开始学习就是,除了计算机专业,其他专业可能学习的第一门编程语言为语言,还是谭浩强爷爷那本,当时想着有点基础,无外乎就是语言的升级版,于是开启了的路程。语言这个东西,可能过后你会发现,它真就一工具,你如果想做个爬虫或者数据分析,那多半会选择,无论是接口还是开源社区都非常的完善,如果想做一个快速迭代的项目,也可以选择的框架或者 Java的框架快速完成开发,如果是内核驱动,那老老实实的用大哥 C,如果玩儿数据库,搜索引擎就整 C++,如果是分布式或者那一套,自然就是。原创 2024-02-20 22:27:09 · 912 阅读 · 0 评论 -
【C语言与C++面试知识总结】【转载】
方法:将析构函数设置为私有原因:C++ 是静态绑定语言,编译器管理栈上对象的生命周期,编译器在为类对象分配栈空间时,会先检查类的析构函数的访问性。若析构函数不可访问,则不能在栈上创建对象。原创 2024-02-19 21:24:25 · 886 阅读 · 0 评论 -
【C语言高效编程与代码优化】【转载】
在最近的一个项目中,我们需要开发一个运行在移动设备上但不保证图像高质量的轻量级JPEG库。期间,我总结了一些让程序运行更快的方法。在本篇文章中,我收集了一些经验和方法。应用这些经验和方法,可以帮助我们从执行速度和内存使用等方面来优化C语言代码。尽管在C代码优化方面有很多的指南,但是关于编译和你使用的编程机器方面的优化知识却很少。通常,为了让你的程序运行的更快,程序的代码量可能需要增加。代码量的增加又可能会对程序的复杂度和可读性带来不利的影响。原创 2024-02-18 20:09:48 · 943 阅读 · 0 评论 -
【开源好书学习 C 语言】【转载】
书是非常私人的东西,编程类书籍也不例外。我们都是通过阅读书籍来帮助掌握某种语言的基本知识。随后又通过阅读书籍来全面探索这门语言的灵活性。我仔细考察了一些我最喜爱的 C 语言书籍,并从其中选出了对我意义最大的九本。C 语言是一种通用的、面向过程的高级编程语言。也是最具流行度和影响力的编程语言之一。该语言在设计时就被设计为可以通过编译器进行编译,以此来对内存进行底层操作、高效地执行机器指令以及在运行时仅需要最小的支持。很多很多编程语言都得益于 C 语言, C 语言就像是编程界的通用语言一样。C 语言非常易懂。它原创 2024-02-18 19:54:18 · 895 阅读 · 0 评论 -
【462 字节 C 代码实现雅虎 logo ACSII 动画】【转载】
它们指向多边形的内部,所以我们可以直接从定义线段的点得到 a 和 b,即将定义一条边的向量 (x1 – x0, y1 – y0) 旋转 90 度,得到 (a, b) = (y1 – y0, x0 – x1)。我使用边上线段的中点,即 (xt, yt) = ((x0 + x1)/2, (y0 + y1)/2),因为在我们量化 θ 之后,边的角度会出现轻微的偏移,而这会导致超出边长的错误。使用一组不同的移动序列或者旋转(再或者任意的 3D 切换,这基本上是追踪 logo 的轨迹),可以很简单地改进这段动画。原创 2024-02-17 22:06:44 · 805 阅读 · 0 评论 -
【Redis之父用纯C语言代码实现Telegram Bot框架】【转载】
从 antirez 创建的另一个仓库 (https://github.com/antirez/failed-3d-prints-bot) 可知,他用了一台带网络摄像头的树莓派来监控 3D 打印机,并在检测到打印失败时通过 Telegram 接收该状态消息。为了通过 Telegram 接收信息,他编写了一个 Telegram Bot 框架来创建 Telegram 机器人,他所创建的这个机器人用途是检测打印机的失败状态,并传回一张该状态对应的 3D 打印机实时图像。目前该项目仍处于开发阶段,请谨慎使用。原创 2024-02-17 17:50:50 · 364 阅读 · 0 评论 -
【Redis创始人用C语言编写最小聊天服务器,核心代码仅300行】【转载】
antirez 表示,编写这个示例是为了帮助他的前端开发朋友了解系统编程知识,比如单个进程执行多路复用、获取客户端状态,并在客户端拥有新数据后尝试快速访问此类状态,等等。Smallchat 源代码已托管至 GitHub:https://github.com/antirez/smallchat。可以看到,Smallchat 的核心代码仅 300 多行。Redis 创始人 antirez 用纯 C 语言代码写了一个聊天服务器的最小编程示例:Smallchat。原创 2024-02-17 17:49:51 · 372 阅读 · 0 评论 -
【改了一行代码,数组遍历耗时从10.3秒降到了0.5秒!】【转载】
本专题除讲解常见性能问题以及分析、调优手段外,还会重点讲解一些对系统性能至关重要,却又经常被忽视的高级话题,如等。此外,还会涉及到等话题。原创 2024-02-17 17:45:26 · 855 阅读 · 0 评论 -
【全面讲解 C 语言的结构体(struct),一网打尽】【转载】
同理,上面的5个变量,共用一个地址就不足为奇了。为了效率,通常32位机按4字节对齐,小于的都当4字节,有连续小于4字节的,可以不着急对齐,等到凑够了整,加上下一个元素超出一个对齐位置,才开始调整,比如3+2或者1+4,后者都需要另起(下边的结构体大小是8bytes),相关例子就多了,不赘述。占用4个字节,估计是uint_32在起作用,而这里写的8位,只是我使用的有效位数,另外24位空闲,如果在下面再定义一个uint_32 reserved_3 : 8,地址也是一样的,都是以uint_32为单位取地址。原创 2024-02-17 17:33:14 · 2045 阅读 · 0 评论 -
【C语言进阶之 回调函数详解】【转载】
如上述代码:可以看到,Handle() 函数里面的参数是一个指针,在 main() 函数里调用 Handle() 函数的时候,给它传入了函数 Callback_1()/Callback_2()/Callback_3() 的函数名,这时候的函数名就是对应函数的指针,也就是说,回调函数其实就是函数指针的一种用法。结合这幅图和上面对回调函数的解释,我们可以发现,要实现回调函数,最关键的一点就是要将函数的指针传递给一个函数(上图中是库函数),然后这个函数就可以通过这个指针来调用回调函数了。原创 2024-02-17 10:10:36 · 953 阅读 · 0 评论 -
【C/C++ 基础栈溢出及保护机制】【转载】
以下是正文引言");\n", name);return 0;也许这段小程序给你带来了小小的成就感,也许直到课程结束也没人说这个程序有什么不对,也许你的老师在第一时间就指出这段代码存在栈溢出的漏洞,也许你后来又看到无数的文章指出这个问题同时强调千万要慎用scanf函数,也许你还知道stackoverflow是最好的程序员网站。但可能从来没有人告诉你,什么是栈溢出、栈溢出有什么危害、黑客们可以利用栈溢出来进行什么样的攻击,还有你最想知道的,他们是如何利用栈溢出来实现攻击的,以及如何防护他们的攻击。原创 2024-02-16 09:50:17 · 1438 阅读 · 0 评论 -
【嵌入式 C 语言史上最愚蠢的一个BUG】【转载】
但是这个程序,只能在Unix/Linux下工作,因为 Microsoft 的tmpfile()的实现居然选择了 C:\ 作为临时文件的存放目录,这对于那些没有管理员权限的人来说就出大问题了。首先,作者想用一段程序来创建一个文件,如果有文件名的话,就创建真正的文件,如果没有的话,就调用tmpfile()创建临时文件。这个问题让我花了很多时间,最后发现问题原来是没有空格导致的,TNND,下面我用代码高亮的插件来显示上面的代码,我相信这样的bug,就算你是高手你也会犯的,你来看看作者犯的这个Bug吧。原创 2024-02-15 22:21:44 · 427 阅读 · 0 评论 -
【嵌入式 C 语言程序数据存储结构】【转载】
程序可以简单的分为code(程序)区,和data (数据)区,code区在运行的时候是不可以更改的,data区放全局变量和临时变量,是要不断的改变的,cpu从code区读取指令,对data区的数据进行运算处理,因此code区存储在什么介质上并不重要,象以前的计算机程序存储在卡片上,code区也可以放在rom里面,也可以放在ram里面,也可以放在flash里面(但是运行速度要慢很多,主要读flash比读ram要费时间),因此一般的做法是要将程序放到flash里面,然后load到 ram里面运行的;原创 2024-02-15 21:52:45 · 1405 阅读 · 0 评论 -
【10个超赞的C语言开源项目】【转载】
今天给大家分享10个超赞的C语言开源项目,希望这些内容能对大家有所帮助!原创 2024-02-15 21:42:38 · 1029 阅读 · 0 评论 -
【C 语言代码实现一个简单异步事件触发机制!】
QT 中有一种异步处理机制叫做信号和槽函数,通过将信号与槽函数进行绑定连接,后续若该信号触发,会自动调用对应的槽函数。这种机制很适合处理很繁琐的逻辑程序,例如我点击界面的 close 按钮,便触发 close 信号,自动调用 close 绑定的槽函数,关闭界面。这种使用流程简便快捷。这种处理机制可称作异步处理,C 语言中也有一些异步处理开源的库,例如 libevent、libev 等,前者功能丰富,技术框架较为成熟,在许多项目中都见到它身影。这些开源库成熟,但是也庞大,能不能搞一个简洁的异步事件库呢?原创 2024-01-03 16:56:25 · 714 阅读 · 0 评论