自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(182)
  • 资源 (34)
  • 问答 (1)
  • 收藏
  • 关注

原创 mount:从应用软件到内核函数执行的过程

在linux内核中,不同的文件系统以文件系统类型结构(struct file_system_type)保存在静态指针file_systems(static struct file_system_type *file_systems;),如ext4文件系统,它通过ext4_fs_type结构对象完成内核中的文件系统类型注册。如mount在装载ext4文件系统类型时,基本首先要做的就是分配文件系统上下文,为各种成员赋值,包括文件系统类型结构,之后执行ext4_init_fs_context 初始化上下文函数关联

2023-01-12 23:50:35 1347 1

原创 grub2: autogen.sh执行过程

GNU GRUB是一个Multiboot引导加载程序。它源自GRUB,GRand Unified Bootloader,最初由Erich Stefan Boleyn设计和实现。简而言之,引导加载程序是计算机启动时运行的第一个软件程序。它负责加载并将控制转移到操作系统内核软件 (如Hurd或Linux)。内核反过来初始化操作系统的其余部分 (例如GNU)。GRUB2取代了以前称为 GRUB 的内容 (即 0.9x 版),保留为GRUB Legacy模块。

2022-12-12 00:42:28 608 3

原创 linux设备模型:pci驱动程序注册过程

MANF_ID 表示厂商ID 是一个数字ID,如0xfead 或 PCI_ANY_ID(表示通用),如果有真实硬件应与硬件ID一致MODEL_CODE 表示厂商设备 是一个数字ID,如0x1234 或 PCI_ANY_ID(表示通用),如上默认情况下,子系统的厂商ID和厂商设备ID不用设置,它们采用PCI_ANY_ID(表示通用),class、class_mask等成员默认也不需要指定,在设备创建后,创建相关对象关联设备节点即可(或创建时指定父级)pci_probe: 驱动探测函数,可在函数内

2022-11-28 01:32:51 2059

原创 linux虚拟化: svm: 初始化及重要函数分析

svm是一种虚拟机环境,可用于AMD64、海光64或Intel EM64T CPU。这种新型的虚拟机技术可以提高性能和节能,但您需要在使用任何使用它的软件之前启用它。“支持向量机模式”是允许AMD处理器使用支持向量机指令集的功能。这对于需要同时兼容Intel、AMD和海光处理器的应用程序很有帮助。svm通过创建kvm,注册svm_init_ops初始操作结构,完成硬件的一系列初始化及包含功能操作结构的访问方式。

2022-11-25 00:20:01 676

原创 linux虚拟化: kvm: 初始化及创建用户过程

基于内核的虚拟机(KVM)是一种内建于Linux的开源虚拟化技术。具体而言,KVM可帮助您将Linux转变为虚拟机监控程序,使主机计算机能够运行多个隔离的虚拟环境,即虚拟客户机或虚拟机(VM)。Linux自内核版本号2.6.20起,植入KVM内核源码,因此KVM能享受每一项新的Linux功能、修复和发展,无需进行额外工程。KVM全称为Kernel-based Virtual Machine,基于内核的虚拟机,它主要起到内核层的虚拟资源分配、管理,然后由用户层软件模拟出我们使用的虚拟机客户

2022-11-20 01:19:06 1227

原创 linux设备模型:固件设备及efi固件(平台)设备节点创建过程分析

本篇分析固件系列(以efi为例),固件可以分为(系统)引导阶段(efi stub启动模式)、固件内存映射(物理地址映射到虚拟地址等等)、固件注册到平台设备、平台设备运行等等。固件设备具有更广泛的意义,当然复杂度也更高一些。 固件系列更偏向于开发板,通常由内核模块(服务)与应用程序完成一些硬件级上电/下电及设备形式控制(如更新固件)等等。参考Documentation中一些文章内容

2022-11-17 23:23:05 853

原创 linux设备模型:设备及设备节点创建过程分析

本篇分析设备的初始化及注册过程,包括设备与驱动绑定,设备与电源管理之间的联系、中断域的储存及物理设备之间的关系等等。这一篇内容较多,结合kobject、kset、class、bus等众多概念,也是从理论阶段转换为实际使用阶段的重要过程。 设备初始化阶段,创建kset容器结构对象devices_kset,用于设备的uevent(用户事件通知)操作。dev_kobj表示设备根对象,在它的基础上扩展(延伸)sysfs_dev_block_kobj("block") 块设备根对象和sysfs_dev_ch

2022-11-13 21:38:01 572

原创 linux设备模型:devtmpfs虚拟文件系统分析

devtmpfs是一个设备文件系统,它将其所有文件保存在虚拟内存中。devtmpfs中的所有内容都是临时的,因为不会在您的硬盘驱动器上创建任何文件。如果卸载devtmpfs实例,其中存储的所有内容都将丢失。 devtmpfs的根路径在/dev,它通过文件系统上下文创建mount(挂载)对象,使得用户层可以访问。 devtmpfs通过devtmpfsd线程函数,分配新的命名空间代理(nsproxy)对象,并分配、关联多类命名空间,如mnt、uts、ipc、pid、cgroup、n

2022-11-10 01:00:29 2814 1

原创 linux设备模型:bus概念及pci_bus分析

bus(总线)是一种特殊的抽象框架,与class有着本质上的不同,class感觉上只是把一些核心组件聚集在一起,它主要为访问组件提供便利(如提供组件地址),而bus则是实实在在的功能性框架,它即可负责管理、维护驱动与设备之间的关系,也可作为主桥设备与硬件之间的访问通道等等。如pci总线,当pci硬件设备插入卡槽后,首先通过pci_bus_type(pci总线操作结构) 中的 pm(电源操作结构)操作相关函数唤醒设备,然后通过pci_bus_match函数查找硬件设备是否被注册到驱动(通过pc

2022-11-06 14:40:26 955

原创 linux设备模型:kset及设备驱动抽象类(class)分析

kset属于kobject属于特定子系统的一组特定类型的kobject,与其说是一组特定类型,倒不如说用kset表示一组特定类型的kobject更方便与管理、遍历等操作,实际场景中如果需要以某个根为目标的多组特定类型的kobject,可以编写复合型kset容器,以根kset容器为基础(实际还是根kobject),在它之后继续关联多个不同的kset容器,当然,这也是linux内核中设备驱动的现状。kset容器相对于kobject来说,主要多了kobjs的uevent操作,用于记录

2022-11-05 00:50:36 667

原创 linux控制组: cpuset解析

cpuset提供了一种机制,用于将一组CPU和内存节点分配给一组任务。在这里,“内存节点”是指包含内存的在线节点。CPU集将任务的CPU和内存放置限制为仅任务当前cpuset中的资源。它们形成虚拟文件系统中可见的嵌套层次结构。这些是管理大型系统上动态作业放置所需的基本钩子,超出了已经存在的钩子。cpuset使用控制组中描述的通用cgroup子系统。任务的请求,使用sched_setaffinity系统调用将CPU包含在CPU

2022-11-03 21:09:52 3453

原创 linux设备模型:sysfs(kobject)解析

sysfs 是一个最初基于 ramfs 且位于内存的文件系统。它提供导出内核数据结构及其属性,以及它们之间的关联到用户空间的方法。任何 kobject 在系统中注册,就会有一个目录在 sysfs 中被创建。这个目录是作为该 kobject 的父对象所在目录的子目录创建的,以准确地传递内核的对象层次到用户空间。sysfs中的顶层目录代表着内核对象层次的共同祖先;例如:某些对象属于某个子系统。 在与其目录关联的 kernfs_node 对象中内部保存一个指向实现目录的

2022-10-30 13:04:25 1158

原创 linux审计子系统:内核层执行原理

linux审计子系统用于记录内核部分子模块及应用层(应用程序)的运行状态,如文件系统、进程、systemd应用的执行进展、遇到的问题等信息。审计子系统通过netlink与auditd应用建立kernel audit直接的通信,并通过auditd把信息写入/var/log/audit/audit.log文件(默认地址,可以设置)。 linux审计子系统内核部分设计相对较为简单,甚至内核文档都没有找到关于它的单独描述(只找到了它的函数定义描述)。

2022-10-27 21:50:20 1427

原创 linux终端设备:pty设备初始化、创建过程

上一篇[](https://lkyof.blog.csdn.net/article/details/127456330?spm=1001.2014.3001.5502)分析了tty子系统、tty设备、console设备的初始化及创建过程。默认情况console终端的启动程序为agetty,它访问的是/dev/console inode,执行的console_fops操作结构中的函数,而由类Xwindow中的终端或远程ssh访问的是/dev/ptmx (pt

2022-10-23 19:38:13 954

原创 linux终端设备:tty子系统相关的初始化

>  linux类系统相较于windos类系统用“魔幻”也不为过,神奇的控制台终端如ctrl+alt+F1至F6、UI桌面打开终端、远程ssh登录等等,在神奇的命令行协助下总能随时随地完成手中的工作。>  当然,这些功能虽不算复杂,但庞大的架构及繁多的代码让人有一种深不测的感觉。经过一段时间对终端相关代码的分析对它们有了初步的了解。它们采用较为一致的思路方式实现,代码难度也不算太高,具备字符驱动相关的知识加上足够的耐心便可以解开这个“庞然大物”。>  linux终端子

2022-10-22 21:46:58 1261

原创 分布式块设备复制(DRBD)分析

DRBD由客户端(drbdadm、drbdsetup、drbdmeta)、内核模块(drbd.ko、drbd_transport_tcp.ko)和相关脚本而构成,用以构建高可用性的集群,其实现方式是通过网络来镜像整个设备。DRBD负责接收数据,把数据写到本地磁盘,然后发送给另一个主机。另一个主机再将数据存到自己的磁盘中,参考图1。

2022-10-04 22:58:02 1039

原创 proc: 虚拟文件系统初始化

linux内核中经常使用一种虚拟文件系统,它在内核启动后创建,并结合文件操作特性运行在缓存中,也就是说它具有文件操作的功能(函数调用、文件属性变更等),数据不会写入到磁盘,这里简称为proc系统。proc系统初始化并创建/proc/self/fs、/proc/sys等目录,在4.15之前的内核版本,它结合ctl_table结构,完成虚拟读写、文件属性的变更、内核运行时参数修改等操作,而4.15之后的内核版本,ctl_table移除了proc_dir_entry结构,相当于虚拟文件的读写、文件属性的变更等操作

2022-09-25 22:47:15 564

原创 x86: perf_events内核初始化

Linux性能计数器的使用(perf_events)可能会带来泄露受监控进程访问的敏感数据的巨大风险。在直接使用perf_events系统调用API的情况下,数据泄露都是可能的以及由perf工具用户模式实用程序(perf)生成的数据文件风险取决于perf_events性能监控单元(PMU)的数据的性质和perf收集并公开以进行性能分析。收集的系统和性能数据可分为以下几类尔“架构性能监控”CPUID检测/枚举详细信息struct {} split;};cpu_hw_events CPU硬件事件/**//*

2022-08-20 21:16:29 1064

原创 send_sig: 内核执行流程

当一个信号从内核或另一个进程发送到一个进程时,内核通过调用 send_sig()、send_sig_info()、force_sig() 或 force_sig_info() 函数来传递它。 调用关系如下: send_sig() -> send_sig_info() ... send_signal_locked() ... force_sig() -> force_sig_info() ... send_signal_locked() ......

2022-08-10 21:22:56 1741

原创 bpftrace:简便输出调试信息

bpftrace是一种用于Linux增强型伯克利包过滤器(eBPF)的高级跟踪语言,使用LLVM作为后端将脚本编译为BPF字节码,并利用BCC与Linux BPF系统进行交互,以及现有的Linux跟踪功能:内核动态跟踪(kprobes)、用户级动态跟踪(uprobes)、和跟踪点(tracepoint)。bpftrace语言的灵感来自awkh、C、DTrace和SystemTap等前身跟踪器。上一篇实现了tracepoint定义及函数调用,本篇也以这个示例和官方提供示例为基础讲述。...

2022-08-07 22:37:30 575

原创 tracepoint: 定义函数及调用示例

放置在代码中的跟踪点(tracepoint)提供了一个挂钩来调用您可以在运行时提供的函数(探针)。 跟踪点可以是“on”(一个探针连接到它)或“off”(没有连接探针)。 当跟踪点“关闭”时,它没有任何效果,除了添加微小的时间损失(检查分支条件)和空间损失(在检测函数的末尾为函数调用添加几个字节并添加数据 结构在一个单独的部分)。 当跟踪点“打开”时,每次执行跟踪点时都会在调用者的执行上下文中调用您提供的函数。 当提供的函数结束执行时,它返回给调用者(从跟踪点站点继续)...

2022-08-07 13:51:13 796

原创 进程:execve加载流程

execve函数用于装载一个可执行文件以进程为单位加载到内存中,execve在内核空间中的调用可以追溯到kernel_execve -> run_init_process函数,而用户空间通过SYSCALL_DEFINE3(execve...)->do_execve进入函数

2022-08-06 18:50:50 342

原创 ipv4: inet初始化过程

Internet Protocol version 4,简称ipv4。ipv4模块从网络碎片队列初始化开始启动,然后执行cipso初始化,inet初始化等等。

2022-08-04 19:34:21 580

原创 ELF:加载过程

Executable and Linkable Format,中文名称“可执行可链接格式”,简称为ELF。ELF是Linux类系统的主要可执行文件,参数格式对应架构Application Binary Interface(ABI)文档

2022-07-30 19:17:41 1063

原创 socket:内核初始化及创建流(文件)详细过程

socket中文名称为套接字,属于传输协议及功能接口的封装。socket首先初始化注册(socket)文件系统,然后由使用它的模块传入具体的地址族(类型)family,如ipv4模块中的(void)sock_register(&inet_family_ops); 当调用者执行socket()函数时,会触发__sys_socket函数,完成socket文件的创建、修改模式为流模式、提供文件系统操作结构的功能接口、SELINUX策略绑定等等。...

2022-07-30 18:12:23 2082

原创 AMD64(x86_64)架构abi文档:

由于外部函数是通过GOT插槽直接调用的,所以在第一次调用时,不需要调用动态连接器来查找函数符号,传递参数的方式可以与本文中指定的不同。

2022-07-25 00:28:57 1524 5

原创 AMD64(x86_64)架构abi文档:中

本篇基于延伸章节。

2022-07-24 21:31:32 3298

原创 AMD64(x86_64)架构abi文档:上

本节为AMD64处理器系列定义了带有任意记录格式的调试(DWARF)调试格式。AMD64ABI没有定义调试格式。然而,所有在AMD64上实现DWARF的系统应使用以下定义。DWARF是一个用于符号级、源代码级调试的规范。调试信息格式不适合任何编译器或调试器的设计。有关DWARF的更多信息,请参见DWARF调试格式标准,可在以下网站获得http。...

2022-07-23 19:32:37 1304

原创 baddy:核心函数入口

上一篇分析了内存域的初始化过程,及扩展内容cpu热插拔函数的注册及热插拔线程的作用等等。UMA下只有一个pglist_data对象也就是对应一个内存域,而NUMA下最多拥有5个内存域(zone),ZONE_DMA、ZONE_DMA32、ZONE_NORMAL、ZONE_HIGHMEM、ZONE_MOVABLE等等,内存域类型根据具体硬件来决定。baddy系统的入口(核心)函数为__alloc_pages,经典调用可以追溯到slub分配器的kmalloc函数,参考。...

2022-07-21 21:58:43 346

原创 baddy:初始化内存域

由于硬件的限制,内核并不能对所有的页一视同仁。有些页位于内存中特定的物理地址上,所以不能将其用于一些特定的任务。由于存在这种限制,所以内核把页划分为不同的区域(zone)。内核使用区域对具有相似特性的页进行分组。...

2022-07-16 23:29:08 373

原创 vmalloc 执行过程

vmalloc执行过程,与kmalloc核心执行类似。

2022-07-10 20:50:26 209

原创 ioremap执行过程

early_ioremap_init在start_kernel -> setup_arch函数中调用:

2022-07-10 15:43:35 507

原创 slub构建过程

90年代初期,Mark Hemment提交了slab分配器系统的缓冲区分配和管理的相关补丁,用于减缓Linux物理内存(以页为单位)由分配频繁、分配过剩带来的性能损耗问题。之后,随着大规模多处理器系统和 NUMA系统的广泛应用,slab分配器逐渐暴露出自身的不足,Christoph Lameter在2.6.22中引入slub分配器。slub分配器简化kmem_cache、slab等相关的数据结构,并且保留了slab分配的所有接口函数。 x86架构下,默认配置文件只打开slub相关宏定义,分析mm/slu

2022-07-08 23:33:59 219

原创 kmalloc执行过程

首先看下KMALLOC_MAX_CACHE_SIZE值: 在x86架构下KMALLOC_MAX_CACHE_SIZE为4MB,: 进入kmalloc_order_trace函数: 继续分析kmalloc:

2022-07-03 22:18:08 478

原创 linux memblock执行过程

x86系列架构中,memblock_reserve函数最早在early_reserve_memory函数中调用,执行顺序为: start_kernel -> setup_arch -> early_reserve_memory -> memblock_reserve。 memblock_add_range函数包含五个参数:memblock_type对象;内存区域的物理基地址;内存区域的大小;最大 NUMA 节点数;标志参数。先看memblock定义: 进入memblock_add_range:

2022-07-02 18:10:25 454

原创 linux开源软件代码提交流程

1. 注册帐号登录https://github.com/,点击Sign up,参考下图:2. 生成key登录成功后,点击右上角头像,选择Settings,参考下图:然后选择左下角Developer settings,参考下图:点击左侧Personal access tokens,可以看到Generate new token,参考下图:点击Generate new token,Note编辑框中随便输入,下面的选项信息中除了delete:相关字样不选,别的全部选上,防止push时权限不足,参

2022-05-22 12:21:11 732 1

原创 linux调度(smp)函数分析

sched_initvoid __init sched_init(void){ unsigned long ptr = 0; int i; /* Make sure the linker didn't screw up */ BUG_ON(&idle_sched_class + 1 != &fair_sched_class || &fair_sched_class + 1 != &am

2022-04-17 20:19:52 957

原创 linux kernel_thread执行过程

kernel_thread  kernel_thread定义(kernel/fork.c):/* * Create a kernel thread. */pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags){ struct kernel_clone_args args = { .flags = ((lower_32_bits(flag

2022-03-17 00:28:32 2625

原创 linux内核启动过程5:启动用户空间

上一篇<<linux内核启动过程4:内核运行时>>分析到了内核进入运行时状态(不退出),本篇分析用户空间(用户层)的加载过程。启动应用空间  进入kernel_init函数,在这里做了用户空间的初始化及启动(pid)1进程工作:static int __ref kernel_init(void *unused){ int ret; kernel_init_freeable();  进入kernel_init_fre.

2022-03-01 22:20:15 670

原创 linux内核启动过程4:内核运行时

上一篇<<linux内核启动过程3:内核初始化阶段>>分析到了start_kernel执行流程,本篇继续内核切换到运行时状态。内核运行时状态  内核初始化流程已经分析完成,如何保持内核进入运行时状态(不退出),接下来分析跳过的函数arch_call_rest_init:/* Do the rest non-__init'ed, we're now alive */ arch_call_rest_init();  进入arch_call.

2022-02-26 13:23:02 426

tracepoint源码示例

在驱动文件中增加tracepoint相关内容,分析tracepoint在实际项目中的用法。

2022-08-07

tensorflow_install.zip

针对tensorflow1.14.0的离线依赖制作,其中包含了所有依赖库,内部RemdMe文件排列了所有依赖库的安装顺序,按这个顺序安装即可,也可以根据这个顺序制作rpm包。

2020-10-06

DataOperation_20200304.zip

作者利用私下时间实现的一个完全随机加密、解密库。库运行多次加密同一个文件,然后按照同样次数解密即可。 库中主要代码是DataOperation_类,它在DataOperation_.h和DataOperation_.cpp中。 库基于VS2010编写完成,如果您没有安装环境可以把上述类拷到您的工程中执行。 另外,在我的博客中有一篇文章专门讲述这个库的实现原理。

2020-03-04

linux虚拟机(VMware-tools)映像.rar

压缩包中包含VMware12版本客户端使用的vmware-tools(linux虚拟机映像)。

2019-10-19

ubus源码库

可以使用的ubus库,只需要安装标准cmake编译方式进行编译及安装即可,编译ubus之前首先确保系统已经安装了json-c,lua以及libubox.

2019-04-06

ubus及依赖库安装

在ubuntu16.04系统上,安装ubus相当麻烦需要几个依赖库支持,网上下载的依赖库大部分编译不过去,这里把我编译通过的库上传上来,供下载使用!

2019-04-06

c、c++智能数据架构

使用C、C++编写的多层次数据架构,里面包含多种尖端技术及高度设计思想。

2018-11-25

C语言实现内存池

使用C语言编写的一个可以用来使用的内存池,编写方式达到内存"0碎片"的标准。

2018-09-25

C语言实现完整功能的内存池

使用C语言编写的一个可以用来使用的内存池,编写方式达到内存0碎片的标准。

2018-09-25

MFC内部调用matlab函数(32位/64位)

本项目采用win7 64位系统、VS2010和matlab2014a制作,项目展示了VS2010调用matlab库函数的方法。如果是32位系统可以参考我的博客,修改包含路径以及找到win32使用的dll即可。

2018-08-18

MFC框架截屏指定位置并保存为png格式

在MFC工程中调用CImage类实现指定位置截屏并保存为png格式图片,使用pdf函数可以加载此方法生成的图片。

2018-08-16

linux_jdk1.6.0_31

linux64位系统使用的jdk1.6.0_31,实测可用,请放心使用。

2018-07-01

linux3.0内核

可以使用的linux3.0内核,编译linux驱动程序不可缺失的一部分。

2018-07-01

红黑树完整实现文件

红黑树结构的完整实现,清晰、易懂以及打印出当前树的所有节点。

2018-06-26

数据文件随机加密和解密

使用C语言作为类的核心实现,实现功能为无规则加密解密,以及大型文件的加密解密。

2018-05-30

MFC访问阿里云Oss方式

强大的MFC访问阿里云Oss工具,内有完整的访问接口(以及部分没用到的接口已经实现完成),自动生成校验文件,下载自动检测校验文件等。

2018-05-11

MFC同时操作多个安卓设备

使用MFC操作大量安卓设备(结合USB插口遍历方法),可以同时向多个设备进行发送指令。

2018-03-31

MFC按USB插口顺序显示所有USB设备(包括安卓)

用MFC制作的顺序显示所有USB插口(已经插入和未插入的),设备遍历显示的原理来自USB View,设备的重要数据信息来自WindowAPI函数,通过这两套函数与一套结合算法,成功显示出所有的设备,并且保存了重要的数据信息,其中经历了C代码库的移植过程。

2018-03-18

简单的内存管理结构

根据自己的思路,实现一个简单的内存管理结构,其中利用了链表作为遍历方式。

2018-03-15

office控件

使用这个ocx注册后,可以做MFC内嵌使用,比如多文档,单文档以及对话框工程!

2018-03-06

C语言编写的XML库源文件(支持XML生成与解析)

完全使用C语言编写的XML库源码,采用链表做节点间的遍历查询。

2017-10-05

vsftpd-3.0.2.tar.gz

linux vsftpd(ftp)安装包,我博客有安装方法

2017-05-25

auto形式更加强大的数据类

c语言风格封装了auto形式功能更多的结构,内部巧妙利用了反射思路实现自定义类存储!

2017-05-16

thinking c++

2017-03-21

c++编程思想

无论什么行业都有入门到精通神职高手的阶段,仔细读完这本书会发现思想境界上有跨越式的突破!

2017-03-21

深入浅出MFC

mfc的重磅之作

2017-03-21

深入了解linux内核第三版中文

很经典的linux内核介绍

2017-03-21

windows核心编程

想了解windows系统底层,这本windows核心编程绝对不容错过!

2017-03-17

C++面向对象高效编程

完整高清版本,在看这本书中就发现有好多知识点需要掌握,其中包括虚拟表格的创建,以及语法的正确使用示范等!

2017-03-17

Linux内核Map完整实现!

Linux内核Map完整实现,内有Windows与linux红黑树结构实现

2017-01-20

Linux内核Map实现

STL Map完整版实现

2017-01-18

list双向循环链表的实现,简单化内存分配与迭代器

简单化实现list链表与迭代器等的关系!适合学习使用。

2016-12-18

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除