8086CPU寄存器 8086CPU寄存器8086CPU共有14个寄存器,分别是AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。所有的寄存器都是16位的。 通用寄存器AX、BX、CX、DX这4个寄存器通常用来存放一般性数据,称为通用寄存器。这4个寄存器可以分为两个独立的8位寄存器来使用。例如AX可以分为AH和AL。AH为高8位,AL为低8位。 段寄存器8086CPU的地址总线有20 2022-01-15 汇编语言 汇编语言
Golang学习笔记(一) Golang学习笔记(一)一、Golang简介Go语言(又称Golang)是由Google开发的一种静态强类型、编译型、并发型的具有垃圾回收功能的编程语言。 二、Golang的基本语法1.名称Golang中变量、常量、类型、函数、语句标签和包的名称遵循以下规则: 以Unicode字符或下划线开头; 首个字符后面可以跟任意数量的字符、数字和下划线; 区分大小写; 不能与Golang中的关键字相同; 2021-11-06 Golang Golang
LevelDB Arena源码分析 LevelDB Arena源码分析什么是ArenaArena是LevelDB中实现的一个简易的内存池。因为LevelDB是一个key-value数据库,所以当为较小的key或value分配内存时可能会引起内存碎片以及性能问题(频繁调用new和delete)。Arena就是为了解决这些问题的。Arena的实现非常简洁,不过100多行C++代码,十分适合学习。下面我们就一起了解一下Google大佬们管 2021-10-23 数据库 C++ 数据库 LevelDB 内存管理
Python的几个知识点 Python的几个知识点最近博主学到了几个Python中比较重要的几个知识点,写篇博客记录一下。 ==和is的区别虽然之前大概知道==和is的区别,但是一直感觉模模糊糊,今天写代码的时候恰巧遇到了这个问题,就去查了一些资料,明确了一下。 ==运算符用与判断两个变量所引用的对象的值是否相等,is则是判断两个变量引用的是否是同一个对象。假设v1、v2是两个引用可变对象的变量,如果v2是由v1浅拷贝得到 2021-10-20 Python Python
Python迭代器实现 Python迭代器实现引言在Python编程中,我们经常使用for-in语句对容器进行迭代。容器类(比如列表、元组等)之所以可以被for-in语句迭代,是因为这些容器类实现了__iter__魔术方法。这个方法返回一个迭代器对象。迭代器对象实现了__next__魔术方法,这个方法可以移动迭代器和获取迭代器指向的值。如果我们想要实现支持迭代的对象,只需要实现__iter__方法以及__iter__返回 2021-09-16 Python Python 迭代器
Python字符串格式化 Python字符串格式化引言字符串格式化是我们在使用Python中经常用到的功能。Python为我们提供了四种格式化字符串的方法,分别是%运算符、字符串format方法、格式化字符串字面值以及模板字符串。 %运算符%运算符提供了一种printf风格的字符串格式化,它的用法跟C语言中的printf十分相似。先来看一个例子: 12s = "我叫%s, 今年%d岁。" % (&quo 2021-08-31 Python Python 字符串
浅谈Unix域套接字 浅谈 Unix 域套接字引言在 Linux 中有许多进行 进程间通信 的方法。今天博主向大家介绍一种常用的进程间通信的方法 ——Unix 域套接字。 简介Unix 域套接字 是一种在本机的进程间进行通信的一种方法。虽然 Unix 域套接字的接口与 TCP 和 UDP 套接字 的接口十分相似,但是 Unix 域套接字只能用于同一台机器的进程间通信,不能让两个位于不同机器的进程进行通信。正由于这个特性 2021-08-26 Linux Linux Unix域套接字 进程间通信
C++多线程编程(二):使用互斥锁 C++多线程编程(二):使用互斥锁上回书说到,我们可以用C++11中的thread类来创建和管理线程。在多线程编程中,我们常常遇到对线程间共享数据访问的各种线程安全问题。在这篇博文中我将向大家介绍如何利用C++11提供的<mutex>头文件提供的相关工具来保护线程间共享数据。 竞争条件首先来看一段代码: 12345678910111213141516171819202122232425 2021-08-13 C++ C++ 线程 并发编程
GCC编译器常用优化参数 GCC编译器常用优化参数 -O0: 不进行优化(默认选项)。 -O1、-O2、-O3: 随着数字变大,代码的优化程度逐渐提高。 -Os:优化尺寸。 -Ofast:启用所有-O3优化,无视严格的标准合规性。 -Og:在 -O1 的基础上,去掉了影响调试的优化。 -O:等价于-O1。 如果使用多个 -O 选项,以最后一个选项为准。 参考 GCC 优化级别 3.11 Options That Cont 2021-08-11 C语言 C语言 GCC 编译器
C++多线程编程(一):使用thread类 C++多线程编程(一):使用thread类千呼万唤始出来!在C++11这一核弹级更新中加入了对多线程编程的支持,从此程序猿们就可以在不借助Boost等第三方库(或者自己造轮子)情况下方便地编写跨平台的多线程程序。我将在《C++多线程编程》这一系列博客中介绍C++11中多线程编程的相关知识。让我们先从thread类开始。 thread类的功能thread类是C++中表示执行线程的类,位于头文件< 2021-08-10 C++ C++ 线程 并发编程
C语言宏函数重载 C语言宏函数重载今天在一篇博客中学到了C语言宏函数重载的方法,在此记录一下: 12345678910111213141516171819#include <stdio.h>#define SUM1(A) (A)#define SUM2(A, B) ((A) + (B))#define SUM3(A, B, C) ((A) + (B) + (C))#define GET_MACRO(_1 2021-08-09 C语言 C语言 宏函数
Linux命令学习之lsof Linux命令学习之lsof简介lsof是一个用于列出进程打开的文件的命令。由于在Linux系统上“一切皆文件”,lsof不仅可以获取进程打开的普通文件的列表,还可以获取进程打开的目录、块特殊文件、字符特殊文件、套接字等各种信息。 lsof的安装12# 在ArchLinux上通过pacman安装。sudo pacman -S lsof lsof输出的信息我们打开nano文本编辑器,然后执行lso 2021-08-03 Linux Linux
Linux生成UUID Linux生成UUID在/proc/sys/kernel/random/uuid处有一个特殊的文件,每次读取这个文件可以生成一个UUID: 12cat /proc/sys/kernel/random/uuid# 输出为0353511c-1afa-4b37-9a26-cd7ad3ebefc6 2021-07-26 Linux Linux
daemon_init的实现 daemon_init的实现引子守护进程(Daemon)是一种长期执行特定任务的进程,在编写某些程序(例如Web服务器)时经常使用到守护进程。在Linux中,需要根据一些约定将普通进程转换为守护进程。每次我们想要使用守护进程时都要进行繁琐的转换,很不方便。所以博主就实现了一个名为daemon_init的函数,把这些转换步骤都“包装”起来。当我们想要将一个普通进程转换为守护进程时,只需要调用这个函数 2021-06-04 Linux C语言 Linux 守护进程
getopt、getopt_long和getopt_long_only的用法 getopt、getopt_long和getopt_long_only的用法引子前段时间博主曾写过一个Linux下的小项目叫myls,也就是实现了ls的基本功能。myls的命令行参数解析是由博主自己编码完成的,这可把博主给坑惨了!博主不久前查资料的时候看到了getopt、getopt_long和getopt_long_only这三个函数,发现这三个函数堪称命令行参数解析的“神器”!早知道有这样的工 2021-06-01 C语言 C语言 Linux