-
C语言和NASM汇编混合编程
导入今天要谈的不是C语言中用asm关键字嵌入汇编,这种一是少见,尤其在现代编译器智能的优化下,更加少见。二是也只是和少量汇编代码的嵌入,今天要谈的是C编译单元和NASM汇编编译单元之间的混合链接。这看起来很简单,其实还是有一些需要注意的地方的,尤其是汇编调用C编写的函数,很容易出问题,为什么呢?因为调用函数其实涉及到函数参数的压栈以及函数栈的开辟和清理。而高级语言下,编译器会根据调用约定(比如__stdcall,_cdecl)自动处理这些,让上层的开发者无需知道内部发生了什么,但是自己实现...…
-
自定义x86中断
思路对于装有操作系统OS的x86系统来说,正常用户模式是没有办法自定义中断的,用户模式提供的软中断只有系统调用,比如int 80h和syscall ,且无法自定义中断号和中断处理函数。但是我们确实可以编写硬中断的处理函数,也就是ISR,中断服务程序,只不过需要内核编程(Linux)或者内核驱动编写(Windows),比如Windows下,利用WDK驱动开发包,绑定IRQ,使用IoConnectIntteruptEx函数可以注册中断服务程序,然后用户态使用DeviceControl函数和驱动...…
-
vim使用技巧
导入今天朋友问我vim好像不好用,为什么这么多人喜欢用。我说让我看看你是怎么用的,结果他就方向键上下左右移动,i 插入,然后退格慢慢删除单词,再修改成新的单词,然后esc :wq保存。我说这就难怪不好用了,不过好歹他还知道使用多行复制和粘贴。所以今天我就想写篇博客,简单介绍几个我觉得vim中非常好用的命令和技巧,不涉及任何的插件,vim的插件是非常强大的,但是不用插件,vim已经足够好用。正文 i和a的使用 这里我说的并不是插入命令的i和a,而是配合c,d,v,y命令的i和...…
-
简单匿名聊天室的实现
导入聊天室的架构还是常见的C/S架构,匿名聊天室的特点主要有三点: 匿名性:连接时分配随机ID(如”用户123”) 实时性:采用I/O多路复用技术 轻量级:单线程处理所有连接 为什么不采用多线程?因为多线程的开销很大,对于小项目无所谓,如果是针对“C10K”级别甚至以上的连接的大项目,多线程很难实现。即使采用线程池也是一样,线程池只是节省了线程创建和销毁的开销,但是节省不了线程切换的开销,而线程切换恰恰是线程模型性能损耗比较大的地方。而多路IO复用,...…