请稍侯

iOS weak 底层实现原理

iOS weak 底层实现原理 weak的原理在于底层维护了一张weak_table_t结构的hash表,Key是所指对象的地址,Value是weak指针的地址(这个地址的值是所指对象的地址)数组。 weak 的实现原理可以概括一下三步: 初始化时:runtime会调用objc_i...

Autorelease 及 Autoreleasepool 原理

Autorelease 及 Autoreleasepool 原理 自动释放池在 MRC 模式与 ARC 模式下还是有些差异的。 MRC模式 autorelease会像C语言的自动变量那样来对待对象实例。当超出变量作用域时,对象实例的release实例方法被调用。但同C语言自动变量不...

C语言中的变量常量及其在虚拟内存中的分配

C语言中的变量常量及其在虚拟内存中的分配 在C语言里,使用auto关键字声明自动变量,如果没有被声明为其他类型的变更 ,默认都是自动变量。(注意:auto关键字在C与C++里的用法不同,若编写C/C++兼容程序,最好不要使用auto作为存储类别说明符。) ...

计算机里的内存分配原理

计算机里的内存分配原理 操作系统要求进程不能直接访问物理内存,而是为每个进程分配一块自己独立的虚拟空间,并且每个进程只能访问自己的虚拟地址空间。 进程的虚拟空间是操作系统按分段或分页的方法映射到某个物理空间的,虚拟空间到物理空间的转换是依靠CPU里一个叫...

C语言字节对齐及结构体对齐详解

C语言字节对齐及结构体对齐详解 为什么需要字节对齐 对齐与数据在内存中的位置相关,若一个变量的内存地址正好位于它长度的整数倍,那么就称做自然对齐。如在32位CPU下,假设一个整型变量的地址为0x00000004,那它就是自然对齐的。 字节对齐的作用不仅有利于CPU快速访问,同时合理的利用...

动态链接深入详解

动态链接深入详解 动态链接:为了解决内存及磁盘空间的浪费和更新困难的问题,把程序的链接过程推迟到运行时再进行,就是动态链接的基本思想。让程序在运行时可以动态地选择加载各种程序模块,实现程序功能的扩展,另一方面也可加强程序的兼容的。 动态链接运行时地址空间分布:对于动态链接程序来说,除了可...

ELF文件的装载与Linux的进程

ELF文件的装载与Linux的进程 进程的虚拟地址空间 查看进程虚拟空间分布 cat /proc/<pid>/maps PAE(物理地址扩展) 在CPU字长不变的情况下,扩展地址线长度,修改页映射方式,便使新映射方式可以访问更多的物理内存。 程序的动态装载方法:覆盖装入...

静态链接的深入探究

静态链接的深入探究 首先使用gcc编译两个目标文件,生成a.o、b.o : gcc -c a.c b.c 链接器对目标文件的链接过程中对输入的多个目标文件加工后合并成一个输出文件,合并的过程是将输入文件相同性质的段合并到一起,比如将所有输入文件的”.text”合并到输出文件的”.tex...

读《商君书》,叹驭民五术

读《商君书》,叹驭民五术 1、愚民:统一思想,大一统,赞颂君王的赫赫武功。(反面:自由主义) 2、弱民:国强民弱,治国之道,务在弱民。 3、疲民:为民寻事,疲于奔命,使民无瑕顾及他事。 4、辱民:一无自尊自信;二唆之相互检举揭发,使人人自危于恐惧中。 5、贫民:除了生活必须,剥夺余银...

在main方法之前调用函数

在main方法之前调用函数 方法一:根据glibc的全局构造函数是放在.ctors段中,的怪可以在.ctors段中添加一些函数指针,就可以让这些函数在全局构造的时候调用了,如下: #include <stdio.h> void my_init(void){ print...

setjmp的工作原理

setjmp的工作原理 执行环境 简单说就是CPU中的一些寄存器,这些寄存器保存了程序执行的必要信息,以x86为例: esp 保存当前栈顶的地址。 ebp 保存当前函数栈帧的地址,在函数的进入点处,把esp保存到ebp,这样在函数任何位置,都可以通过ebp加偏移拿到函数的参数。 ...

可执行文件详解之ELF目标文件

可执行文件详解之ELF目标文件 目标文件格式:windows 下的PE(Portable Executable)、Linux 的ELF(Executable Linkable Format)以及 macOS 的Mach-O 格式。 ELF文件类型:可重定位文件(Linux 的.o,Win...

程序的构建过程

程序的构建过程 以最简单的hello.c为例 #include <stdio.h> int main() { printf("Hello World\n"); return 0; } gcc hello.c 做了什么事情? 预处理(也叫预编译Prepr...

万能浏览器

万能浏览器 扫码下载 简体中文 ======= 万能浏览器 - 一个可个性化的自定义浏览器 万能浏览器是一款可以自定义首页的浏览器; 万能浏览器特点: 可以自定义首页,添加自己喜欢的导航网址; 支持iCloud备份同步浏览器个性化设置; 支持多窗口与历史记录访问; 支持无痕模...

使用 macOS 程序员的常用软件

使用 macOS 程序员的常用软件 Alfred : 快捷搜索 参考:程序员的macOS系列:高效Alfred进阶 iTerm/Termius : 终端 JetBrains系列工具 Dash : 文档查询 VSCode : 开发工具 xcode : 开发工具 DBeaver :...

静态链接与动态链接的原理与区别

静态链接与动态链接的原理与区别 源文件先是被编译成一个个目标文件, 再由链接器把这些目标文件组合成一个可执行文件或库。链接的过程,其核心工作是解决模块间各种符号(变量,函数)相互引用的问题,对符号的引用本质是对其在内存中具体地址的引用,因此确定符号地址是编译,链接,加载过程中一项不可缺少的...

把多张图片快速合并成一个pdf文件

把多张图片快速合并成一个pdf文件 img2pdf方案 安装img2pdf,参考:https://gitlab.mister-muffin.de/josch/img2pdf; 建意把源码下下来,在源码目录下直接使用pip3 install .安装,安装好后使用以下命令即可把多张图片转成一...

黄道二十八星宿

黄道二十八星宿 二十八宿 二十八宿,是黄道附近二十八组星象的总称。上古时代人们根据日月星辰的运行轨迹和位置,把黄道附近的星象划分为二十八组,俗称“二十八宿”。古人选择黄道赤道附近的二十八个组星象作为坐标,以此作为观测天象参照物。因为它们环列在日、月、五星的四方,很像日、月、五星栖宿的场所,...

建除十二神

建除十二神 建除十二神,中国民俗信仰中的十二位神明,分别为建、除、满、平、定、执、破、危、成、收、开、闭。这十二位神明每日轮值,周而复始,负责保护凡间人民的平安。在传统农民历中,二十八宿下,通常会依序在每日标注上今日轮值神名,作为择日吉凶的参考,称为十二建除日。 择日参考 建日 健旺...