今天面试某公司,很想拿到offer的一家,结果因为一道自己应该会,却没能很好答上来的面试题被刷,很可惜。不过,当时的表现也太过浮躁,自己太急于求成了,痛定思痛,是时候好好反思一下这道题,再深入学习一下这背后的知识。面试,是实力的较量,更需要好好表现自己!

如下程序段,问计算机如何压栈,压了什么,压的顺序如何? Continue reading »

 

《关于并行貌似正确的废话》系列文章:

  1. 关于并行貌似正确的废话–串行已经尽力了
  2. 关于并行貌似正确的废话-程序语言发展的启示
  3. 《关于并行貌似正确的废话-程序员是优秀的管理者》

在没有革命性的芯片制造技术之前,咱们必须得接受要想快,只能并行!即使出来了新的CPU制造技术,只要有计算,就需要时间,只要有时间需求,人就想要程序跑的越快越好。这是必须的,除了程序员,没有人会享受程序运行的过程。用计算机的人只想要结果!所以性能,将是永恒的主题。

怎么提升性能?咱们从下往上看。

Continue reading »

 

什么是静态链接库?

静态链接库,即static library或 statically-linked library。和动态链接库,即dynamic library 或dynamicly-linked library相对,是Windows和Linux系统中比较常用的库文件。Windows中分别用SLL和DLL文件表示,Linux中分别是.a和.so文件.

静态链接库实际是一些object files(.o文件)和头文件的压缩包,通过GNU工具链中的ar(archiver)程序创建。

静态链接库、动态链接库和共享库

那为何还要有动态链接库呢?静态练级库虽然能很好的节省编译时间。对于一个简单的ls程序,我们需要有屏幕输出,有字符串和格式操作,有文件系统访问等等函数,都要在一个程序中。此时,这个程序会很大。一个小小的ls可能都会有好几兆。如果还有个rm程序,同样也需要屏幕输出,文件系统访问。那么这两个东西,我们可以放到两个库文件里,在执行ls,或者rm的时候,用到屏幕输出操作,就将相应的函数对应的机器码载入内存中,执行。然后再从内存中释放。接着载入文件系统访问的相关函数。这样我们的程序就能变小很多。这种可以动态装载到内存中的库文件就是动态链接库了。Windows下的DLL文件就是动态链接库。

Continue reading »

 

读论文<LLVM: A Compilation Framework for Lifelong Program Analysis & Transformation> CGO 04

1,写在前面的话

全时优化(LifeLong Optimization)对于每个编译爱好者来说,太有魅力了。我在起初也是被这个题目所吸引打算一探究竟。本文是04年LLVM的最早两位开发者Chris Lattner和Vikram Adve所写,发表在04年的CGO上,

先来说说LLVM的历史。2000年LLVM开始开发,2005年Apple雇了Chris Lattner,LLVM也相当于成了Apple的官方支持的编译器。Apple已经将它用在OpenCL的流水线优化,Xcode已经能使用llvm-gcc编译代码。可以说05年之前LLVM一直都是学术界的东西,05年之后用于工业界.而这篇文章写在04年.本博最近听过一个关于LLVM的讨论会,会中有资深人士提到LLVM现在越来越像一个普通的编译器。说这番话的意思是,我们可以从这篇文章里找到LLVM的架构设计和早期的一些实现思想,但请不要迷信LLVM现在有多么神奇,每个架构都会有它的优缺点。

这篇文章,我现在已经读完了理论和介绍部分,性能评测部分还没有读。所以标题里面加了个1,因为接下来,还想作几件事,一是读完文章,二是跟踪一下Chris Lattner最近几年的文章,三是尝试将Open64和LLVM做个对比,最后看看代码。所以敬请期待之后的系列文章。
Continue reading »

 

严格的说WebKit仅仅是个浏览器核心,采用该核心的浏览器很多,如国内的搜狗浏览器,遨游浏览器。其他的如google的chrome(Windows平台,linux平台下为chromium),epiphany(linux平台下,gnome2.28版本之后),苹果的Safari 都采用了webkit的内核。Firefox则是采用Gecko的内核,这是NetScape公司开发的内核,后来开源,mozilla继续开发。另外,现在还有另外两种常见的浏览器内核,Trident主要用在IE系列上,Presto主要用在Opera上。

这篇文章仅仅针对浏览器处理JavaScript的性能作比较,主要在X86平台和龙芯平台。先来解释一下JavaScript,JavaScript是互联网内较为常用的脚本语言,面向对象,主要在浏览器内解释执行,用于生成动态网页,因为很多语言特性受Java影响,所以叫JavaScript。通过JavaScript,浏览器可以运行服务器想要在访问者终端上运行的一些计算程序,以达到更好的浏览体验。 Continue reading »

 

Adobe AIR(Adobe Integrated Runtime)是跨平台的运行时系统,是在Apollo的基础上更名的系统。

开发人员可以通过它将HTML,Ajax Adove Flash和Flex等技术联系在一起,在桌面创建更胖的应用。adobe AIR让用户使用已经熟悉的Adobe工具或者其他的文本编辑器来创建应用,并且能很容易的发布应用。跨平台:windows linux MAC等
传统的浏览器将用户和服务器站点上的内容、应用交互起来。Adobe AIR能够用浏览器中的技术开发桌面应用。简言之,它能将Web应用桌面化。

目前它能很方便的实现桌面集成,包括拖拽,粘帖,任务管理和通知提醒等。并能直接访问本地存储,包括SQL Lite,本地文件读写。
Adobe AIR2.0中新增加的特性:按照类型用默认的程序打开文件,大容量存储设备检测,本地进程API,多点触摸和手势支持等 Continue reading »

 

选项 -fPIC

PICPosition-Independent
Code
的缩写。在计算机系统中,PICPIE(Position-Independent
Executable)
是可以在主存中不同位置执行的目标代码。PIC经常被用在共享库中,这样就能将相同的库代码为每个程序映射到一个位置,不用担心覆盖掉其他程序或共享库。

要想实现位置无关,代码必须通过特定的方式编写、编译才行。比如对于固定地址的绝对跳转指令,就需要使用相对应的相对跳转指令代替,相对位置的计算通过对指令计数器的计算得到。在某些特定的体系结构上(AMD64),共享库就必须支持PIC

Continue reading »

 

1,程序的run-time environment中 stack和heap 一般是相向增长,那么os/编译器是如何确定程序的运行时内存大小的呢?

2,static修饰的变量是静态变量,全局的静态变量将保存在Runtime Environment的静态变量区域中,局部的静态变量如何保存?保存在活动记录的栈里,像其他局部变量一样?
Continue reading »

2009-2011© 编译点滴 Suffusion theme by Sayontan Sinha

无觅相关文章插件,快速提升流量