本文记录了作者关闭博客评论功能的原因和思考,认为评论互动较少且容易引发精神内耗。作者提倡多关注自身成长而非外界评价,并分享了通过阅读、行动和自我投资来减少内耗的心得。文章还引用了《穷爸爸,富爸爸》的观点,强调专注于提升自己是更有效的长期策略,同时呼吁保持佛系心态,避免被社会环境过度影响。
本文通过Python仿真探讨了运动和静止的汽车被鸟拉屎的概率是否相同。假设鸟拉屎位置等概率分布,模拟了运动汽车在道路上往复行驶的情况,结果表明两种情况下的概率几乎相同,均为鸟拉屎概率乘以车长与路长的比值。作者还延伸讨论了类似问题,如下雨时跑步和行走的淋湿程度,指出时间短则淋湿程度低。文章通过代码和数学假设提供了直观的分析和结论。
本文记录了作者将闲置笔记本改造成NAS(网络附加存储)并安装OMV(OpenMediaVault)系统的过程及踩坑经验。作者选择OMV镜像直接安装,推荐将系统安装在U盘以节省硬盘空间,并分享了安装时的注意事项,如USB接口选择、关闭UEFI、硬盘分区等。文章还介绍了基础配置(如网络、用户权限、共享文件夹)和扩展功能(如安装omv-extra插件、配置Docker、使用Jellyfin和Transmission等)。最后,作者总结了使用体验及优化建议,适合对低成本NAS改造感兴趣的用户参考。
本文介绍了如何使用CMake与NDK进行交叉编译以生成动态共享库并链接到Android项目。作者详细说明了Android.mk和CMakeLists.txt的配置方法,包括编译选项、宏定义和环境变量设置。文章还提供了一个完整的编译脚本示例,展示了如何通过CMake工具链文件配置NDK路径、目标ABI和平台版本。最后,作者强调了配置参数与库声明类型匹配的重要性,并附上了相关资源链接,便于读者进一步学习。
本文深入分析了glibc中malloc的源码实现,重点探讨了tcache、fastbin、smallbin、largebin和unsorted_bin的结构及其管理方式。通过详细解析malloc_chunk和malloc_state的定义,作者阐明了chunk的内存布局及其在不同bin中的组织形式。文章还介绍了arena的初始化、扩展和复用机制,说明了线程与arena的关系,以及free操作如何影响bin的状态。通过对malloc和free的流程分析,作者总结了各类bin的作用及其交互逻辑,为理解glibc内存分配机制提供了全面的技术参考。
本文深入分析了glibc中malloc函数的源码实现,探讨了malloc与mmap的关系及其内存管理机制。文章详细解析了malloc的核心实现__libc_malloc和_int_malloc,介绍了malloc的内存分配策略,包括tcache、fastbin、smallbin和unsorted_bin的作用及其管理方式。作者还探讨了malloc如何通过用户态内存池减少系统调用、优化内存分配效率并降低内存碎片的产生。文章总结了malloc的关键特性,如线程安全、内存池管理、内存对齐和内存合并等。
本文作者分享了工作两年半以来心态上的变化,从初入职场的谨慎与自卑,到逐渐积累经验后的自信与焦虑。文章详细记录了作者在工作中从埋头完成任务到主动开发工具、扩展业务范围的成长过程,同时反思了技术深度不足的问题。作者强调基础知识的重要性,并通过学习算法和底层技术提升了能力。此外,文章还探讨了职场中的人际关系、得失心以及焦虑情绪对个人发展的影响,展现了职场新人在适应社会和追求成长中的复杂心路历程。
本文分析了C++中NULL和nullptr的实际使用问题及其区别。作者通过一个模板函数示例,展示了使用NULL作为参数时可能导致的编译错误,原因是NULL可能被解析为整型而非指针类型,导致类型不匹配。相比之下,nullptr能够正确匹配指针类型,避免此类问题。文章还简要探讨了nullptr的实现原理,指出其依赖于编译器的支持。作者建议在C++开发中优先使用nullptr表示空指针,以避免潜在的类型匹配问题,并引用了《Effective C++》的相关建议。
本文深入探讨了C++类的内存分布,特别是虚表(vtable)和虚指针(vptr)的工作原理。作者通过代码和汇编分析,展示了类如何通过vptr指向vtable,以及vtable如何指向虚函数地址。此外,文章详细解析了虚函数调用的流程、单继承和多继承情况下的内存结构,以及虚析构函数的生成和作用。通过实验,作者揭示了虚表在多态实现中的关键角色,并解释了两个析构函数的存在原因。本文适合对C++内存管理和多态机制感兴趣的开发者,提供了理论与实践结合的深刻理解。
本文深入分析了Linux中mmap的实现原理,通过源码阅读详细解读了mmap的入口函数、系统调用流程以及虚拟内存映射的具体实现。文章首先介绍了mmap的参数校验和内存对齐检查,解释了PAGE大小和偏移量的处理逻辑。接着,作者剖析了mmap系统调用的核心函数do_mmap2和ksys_mmap_pgoff,并重点关注了MAP_HUGETLB标志对大页支持的实现。随后,文章详细讲解了虚拟内存区域(VMA)的分配过程,包括通过红黑树管理内存块、获取未映射区域以及mmap_region的作用。作者还提出了关于VMA构建时机、虚拟内存与物理内存的关系等遗留问题,并结合页表的加载流程探讨了虚拟内存的工作机制。最后,文章总结了mmap的关键特点,如内存对齐要求、阻塞行为、可能的失败场景等,为读者提供了对虚拟内存和mmap机制的深刻理解。本文适合对操作系统内存管理感兴趣的开发者阅读,尤其是希望深入了解Linux内核实现的技术人员。