IT技术博客大学习 共学习 共进步
首页 / 编译点滴
IT 2014-09-15 14:11:40 / 累计浏览 5,460

近距离端详Android ART运行时库

这篇技术分析聚焦于Android平台从Dalvik虚拟机向ART运行时过渡的核心变革。文章从Google I/O大会的发布背景切入,指出传统Dalvik虚拟机在应对多核处理器、大内存等新硬件趋势时已显吃力,从而引出ART的诞生。 文章的核心,是将ART与Dalvik进行多维度对比。最关键的差异在于编译策略:ART采用预编译技术,在应用安装时一次性将字节码编译为本地机器码并存储,而Dalvik依赖于每次运行时的即时编译。这一改变带来了直接好处,例如性能测试显示代码执行效率可提升2到3倍,同时因减少了运行时编译开销而有助于延长设备续航。 另一个对比重点是垃圾回收机制。文章通过详实的日志对比了二者的表现:Dalvik的垃圾回收常导致数十甚至上百毫秒的停顿,引发明显的画面卡顿;而ART经过重新设计的垃圾收集器,能将这类停顿时间压缩到微秒级,卡顿现象得到极大改善。 文章也客观指出了ART的权衡之处,即首次安装或设备启动时的编译时间会变长,但这是用一次性的存储和时间成本,换取了应用运行期的长期性能收益。总体而言,这是一次为匹配现代硬件能力而进行的底层架构升级。

IT 2014-04-29 22:34:12 / 累计浏览 2,640

Ctrl+S导致Putty或Xterm命令行无响应问题

这篇讲的是一个让很多用命令行的人都会心头一紧的瞬间:在PuTTY或Xterm里习惯性地按下Ctrl+S想保存什么,结果终端突然毫无反应,好像死机了。作者一针见血地指出了问题的根因——Ctrl+S在终端环境下默认触发了XOFF流控制,这会暂停终端的一切输出,但其实按键和命令都在后台默默执行。 文章给出了解决这个“假死”问题的三个层次方案。最直接的是立刻按下Ctrl+Q,重新打开流控制,就能“唤醒”终端。想从根源上杜绝,可以在.bashrc配置文件中通过stty命令禁用这个快捷键的XOFF功能。而最巧妙的是“一箭双雕”的方案:不仅禁用了Ctrl+S的终端控制功能,还能通过额外的配置,让它在VIM编辑器里重新变回保存文件的快捷键,完美契合了用户的手指肌肉记忆。 对于经常在命令行和编辑器之间切换的工程师来说,这篇文章提供了从急救到根治,再到功能自定义的全套思路,能有效解决这个烦人的操作习惯冲突。

IT 2013-04-07 13:09:03 / 累计浏览 12,740

高效Linux用户需要了解的命令行技能

这篇从Quora问答出发的实用指南,系统梳理了高效使用Linux命令行的关键技能。作者并非简单罗列命令,而是从日常工作的实际场景切入,将技巧分为基本操作、效率提升和数据处理等模块。 文章亮点在于细节的呈现:例如,介绍了如何用一行脚本实现SSH无密码登录,利用`!!`和`!$`快速复用历史命令,以及用`set -x`进行Bash脚本调试。在数据处理部分,展示了如何巧妙组合`sort`和`uniq`命令来完成集合的交并补运算,甚至提到了通过设置`LC_ALL=C`能显著提升排序性能。 更深入的,文章涵盖了系统调试的利器,如使用`strace`追踪程序行为、`dmesg`排查硬件问题。这些工具的介绍都紧扣“解决什么问题”,而非单纯的语法说明。 对于希望提升终端操作效率、摆脱图形界面依赖的开发者而言,这是一份非常扎实的技能清单。

IT 2012-12-11 13:37:27 / 累计浏览 3,880

寄存器分配初探–问题描述( Register Allocation – The Problem )

这篇讲的是编译器如何解决“无限变量”与“有限寄存器”之间的根本矛盾。作者从程序员声明的逻辑变量出发,指出实际CPU的物理寄存器数量极其有限,因此必须由编译器决定在特定时刻将哪些变量放入寄存器。这直接关系到程序性能,因为访问内存比访问寄存器慢了100到1000倍。文章用延迟对比数据清晰地说明,优秀的寄存器分配策略能最大限度减少访存,是生成高效代码的关键。这也是一个经典的资源映射问题,其思想甚至能迁移到操作系统页着色等领域。作为系列文章的开篇,本文聚焦于问题定义和背景,为后续探讨图着色、线性扫描等具体算法做好了铺垫。

IT 2012-09-18 23:04:25 / 累计浏览 1,960

离奇“undefined reference”错误分析与解决方案

这篇讲的是一个挺隐蔽的 C/C++ 链接错误排查故事。作者遇到的“undefined reference”并不罕见,但情况有点离奇:明明用 `-l` 指定了库,`ld -verbose` 也证实库文件能被找到,链接时却依然报错,找不到目标函数。 文章没有停留在表面现象,而是深入到了链接器的工作细节。作者从库的生成、链接顺序,一直追查到符号的可见性。最终发现的根因是,虽然库文件存在,但函数符号可能没有被正确导出(比如未在头文件中声明为 `extern "C"`),或者因为链接器处理库的依赖顺序问题,导致符号未能被正确解析。 这篇分享的价值在于,它超越了“链接库文件”的常规步骤,展示了当基础操作看似正确时,如何一步步从链接器的视角反向追踪问题。对于常和底层构建打交道的开发者来说,这种对工具链细节的深挖思路,往往能解决那些最让人头疼的“离奇”问题。