智能指针是线程安全的? 智能指针实现原理?智能指针(Smart Pointers)是一种用于管理动态分配的内存资源的 C++ 类模板,不是指某个关键字,确保在不再需要时自动释放所持有的资源,从而避免内存泄漏和悬空指针等内存管理问题; 这个类里面通过引用计数 来跟踪指向同一对象的指针数量,每当一个智能指针指向对象时,对象的引用计数会增加;当智能指针超出作用域或被销毁时,引用计数会减少。当引用计数为零时,表示没有指针指向对象 2024-02-28 #基础语法
mmap使用 (更新中) 是什么mmap 是一个符合 POSIX 标准的 系统调用,它允许将一个文件或者其他对象(如设备、匿名内存等)映射到进程的地址空间中,应用程序可以通过内存访问方式来读写文件或者与其他对象进行交互。 能解决什么问题? io 性能优化; 将一个普通文件映射到内存中,需要对文件进行频繁读写时,用内存读写取代I/O读写,以获得较高的性能 提供进程间共享内存及相互通信的方式,当多个进程将同一个对象 2024-02-26 #基础语法
文件打洞和稀疏文件 稀疏文件稀疏文件是一种文件,其中大部分内容是空的(或者说是零填充的),但文件系统仍然为其分配了存储空间,文件大,实际占用磁盘空间少,我们 使用lseek或truncate到一个固定位置生成的“空洞文件”是不会占据真正的磁盘空间。 123456789101112131415161718192021222324252627282930313233343536#include <stdio.h&g 2024-02-26 #linux
内核中文件路径是如何解析的? 前言在文件描述符文章中已经介绍 fd是如何生成的;原本想接下来 说下 fd 和 文件是怎么关联的,但是粗略的看了来整个过程,实在是太复杂,有很多前置的知识点,很难一下子展开讲,要讲明白的话不是一两篇文章能解决的;于是 打算围绕这个问题,再细分下来,逐个击破。 本章的内容 就先简单的介绍 文件路径再linux 中怎么解析的 在文件描述符介绍的文章中 也有讲过 open 函数,这里就不重复叙述怎么进 2024-02-18 Linux #Linux内核
do_last 前言书接上回! 内核中文件路径已经介绍了,一个字符路径是怎么解析的? 路径解析主要是 link_path_walk 函数, 而 do_last 函数是做什么的? 12345678static struct file *path_openat(struct nameidata *nd, const struct open_flags *op, unsigned flags){/ 2024-02-18 Linux #Linux内核
rocky系统编译ceph 不同系统编译ceph 遇到的问题大多情况是 缺包;缺包的话有两种方式 做不同系统编译ceph 遇到的问题大多情况是 缺包;缺包的话有两种方式 直接从yum 源里面安装 从官方https://rockylinux.pkgs.org/ 下载 rpm包,手动安装 这两个方法可以解决大多数的缺包问题,当然也有些包没有适配操作系统的可能需要自己拉源码编译,这种比较繁琐,这个方法放在最后,实在不行才自己编 2024-02-17 ceph #ceph
inode 是什么? inode 是什么?文件数据是存放在磁盘上;磁盘最小的单位是 512byte,我们称之为扇区;在与操作系统交互的过程中,操作系统读取磁盘最小粒度并不是一个扇区,而是8个扇区,也就是4k,称之为块; 扇区是设备的最小寻址单元 块是文件系统最小寻址单元 从操作系统的角度来看,磁盘分为了很多个块,文件数据也是存放在块里面; 和其他主流的存储系统一样,也需要元数据,也就是描述这个块的数据,存放块元数据 2024-01-25 Linux #Linux内核
asan内存检测 asan 是什么ASAN(Address Sanitizer)是针对 C/C++ 的快速内存错误检测工具,用于检测原生代码中的内存错误。相对于我们比较熟悉的 valgrind ,Asan 开销更小、检测到的错误范围更大; ASAN 早先是 LLVM 中的特性,后被集成到 GCC 4.8 中,可通过在编译时设置 CFLAGS,指定相关的编译参数来开启ASAN 特性 ASan 可以检 2024-01-24 #内存检测
文件描述符是? fd 是什么?文件描述符是一个与输入/输出资源相关的整数,也可以被称为文件句柄(file handle)、文件指针(file pointer)或文件引用(file reference)。简单来说,它是操作系统为了管理 I/O 操作而维护的一个表中的索引,代表着系统中打开的文件的一个“门牌号”,在linux 世界中一切皆文件,文件描述符占比很关键 文件描述符的应用 文件操作 2024-01-23 Linux #Linux内核
系统调用 什么是系统调用?系统调用 是内核提供给应用程序使用的功能函数,由于应用程序一般运行在 用户态,处于用户态的进程有诸多限制(如不能进行 I/O 操作),所以有些功能必须由内核代劳完成。而内核就是通过向应用层提供 系统调用,来完成一些在用户态不能完成的工作 说白了,系统调用其实就是函数调用,只不过调用的是内核态的函数。但与普通的函数调用不同,系统调用不能使用 call 指令来调用,而是 2024-01-22 Linux #Linux内核