Linux Kernel系列三:Kernel编译和链接中的linker script语法详解

先要讲讲这个问题是怎么来的。(咱们在分析一个技术的时候,先要考虑它是想解决什么问题,或者学习新知识的时候,要清楚这个知识的目的是什么)。我在编译内核的时候,发现arch/arm/kernel目录下有一个这样的文件:vmlinux.lds.S。第一眼看上去,想想是不是汇编文件呢?打开一看,好像不是。那它是干嘛的?而且前面已经说过,makeV=1的时候,发现这个文件的用处在ld命令中,即ld-Tvmlinux.lds.S,好像是链接命令用的,如下所示如arm-linux-ld-EL-p--no-undefined-X--build-id-ovmlinux-Tarch/arm/kernel/vmlinux.lds。manld,得到-T的意思是:为ld指定一个Linkerscript,意思是ld根据这个文件的内容来生成最终的二进制。也许上面这个问题,你从没关注过,但是在研究内核代码的时候,常常有地方说“__init宏会在最后的模块中生成一个特定的section,然后kernel加载的时候,寻找这个section中的函数”,说白了,上面这句话就是说最后生成的模块中,有一个特定的section,这...

为什么寄存器比内存快?

作者:阮一峰日期:2013年10月14日计算机的存储层次(memoryhierarchy)之中,寄存器(register)最快,内存其次,最慢的是硬盘。同样都是晶体管存储设备,为什么寄存器比内存快呢?MikeAsh写了一篇很好的解释,非常通俗地回答了这个问题,有助于加深对硬件的理解。下面就是我的简单翻译。原因一:距离不同距离不是主要因素,但是最好懂,所以放在最前面说。内存离CPU比较远,所以要耗费更长的时间读取。以3GHz的CPU为例,电流每秒钟可以振荡30亿次,每次耗时大约为0.33纳秒。光在1纳秒的时间内,可以前进30厘米。也就是说,在CPU的一个时钟周期内,光可以前进10厘米。因此,如果内存距离CPU超过5厘米,就不可能在一个时钟周期内完成数据的读取,这还没有考虑硬件的限制和电流实际上达不到光速。相比之下,寄存器在CPU内部,当然读起来会快一点。距离对于桌面电脑影响很大,对于手机影响就要小得多。手机CPU的时钟频率比较慢(iPhone5s为1.3GHz),而且手机的内存紧挨着CPU。原因二:硬件设计不同苹果公司新推出的iPhone5s,CPU是A7,寄存器有6000多位(31个6...
代码星球 代码星球·2020-03-29

FineUIPro v3.5.0发布了,减少 90% 的上行数据量,15行代码全搞定!

一切的一切还得从和一位台湾客户的沟通说起:客户提到将ViewState保存在服务器端以减少上行数据量,从而加快页面的回发速度。 但是在FineUI中,控件状态都保存在FState中,并且为了减少下行数据量,FState的数据不仅用来保存状态,而且用于JavaScript的数据源。所以FState必须写入HTTP响应,才能被JavaScript使用。我在之前的一篇文章中曾详细阐述:http://www.cnblogs.com/sanshi/archive/2013/01/08/2850459.html 但这的确是个问题,FState虽然能够减少下行数据量,但是页面回发时上行数据量依然很大,特别是页面中有多个下拉列表和表格时,上行的数据量可达到500K或者更多,对网速受限的环境的确是个挑战。 FineUI(专业版)v3.5.0将提供一种简单的方法,将FState保存在服务器端,从而大幅减少页面回发时的上行数据量。 注:FState仍然需要返回到页面上(以便JavaScript使用,比如作为表格和下拉列表的数据源),只不过不需要回发到服务器而已。&nb...

【三石视频教程】当FineUIPro遇到ReportViewer

FineUIPro下个版本(v2.8.0)即将支持ReportViewer,为此三石特别制作了一期视频教程,供大家参考。运行效果图: 视频下载:http://pan.baidu.com/s/1gdAEOPd ...

C++ STL 里为什么不维护一个 size 成员变量?

回答:为什么GCC里要把list::size()的复杂度搞成O(N)?一通搜索后终于看到有这样的讨论:关于list::splice()函数。list是链表结构,它的优势就在于可以O(1)的时间复杂度任意插入删除甚至拼接list片段(删除时可能不是,因为要释放内存),list::splice()是一个很强大的功能,它可在任意位置拼接两个list,这正是list的优势。如果我们在类内部以一个变量储存list的长度,那么splice()之后新list的长度该如何确定?这是一个很严峻的问题,如果要在拼接操作时计算拼接部分的长度,那么将把O(1)的时间变成O(N),这么一来list相对vector的优势就消失殆尽。面对这个问题,GCC和VC的STL库作者们做了不同的选择。GCC选择舍弃在list内部保存元素数量,而在size()时直接从头数到尾,这便出现了开头看到的O(N)时间才算出size();相反,VC中有了变量_Mysize,无论在insert()erase()splice()或是push()pop()时都需要对其做相应修改。在上面的两个试验中已经看出同样是10000个push_back(...

CloudFoundry集成Eclipse

对于如何通过Eclipse集成CloudFoundry的插件,CloudFoundry的官网上有详细的介绍。地址是:http://docs.cloudfoundry.com/getting-started.html这个路径下的Tools目录下有一个叫STS-Eclipse点击它,即可进行插件集成。虽然大家都可以通过官网的介绍方式进行插件集成,我觉得我还是在这里啰嗦一下比较好。毕竟我这个是白话文,一看便懂,傻瓜式一键到底安装。嘿嘿..开始了!第一步:在Eclipse上找到help->EclipseMarketplace然后会弹出如下界面。第二步:在Find搜索框当中输入"cloudfoundry",然后回车。将会出现第一点当中所示界面,找到"CloudFoundryIntegrationforEclipse"选项,然后点击"install"按钮。让Eclipse自己主动去寻找资源依赖,然后点击"next",开始安装。接着下面就是简单操作了,我这里就不废话了。第三步:这个安装可能需要的时间有点儿久,不过不需要担心,只需要耐心等待即可。安装完成之后需要重启Eclipse。确认是否安装正...
当地较为有名的狠人 当地较为有名的狠人·2020-03-29

Eclipse上部署项目到cloudfoundry

解释一下对于CloudFoundry的发布方式有很多种,可以通过VMC方式,利用RUBY指令进行发布;也可以用CloudFoundry提供的虚拟镜像文件发布到本地的微型云计算机,自动同步到云上;还有一种方式就是通过集成IDE,直接在IDE界面上进行发布。本篇文档讲解的发布方式就是集成IDE方式进行发布的。这里还有一篇全图文的用sts来部署应用的教程,可以参考:http://www.joshlong.com/jl/blogPost/getting_started_with_cloud_foundry_for_java_and_spring_developers.html首先说明一下,我也是初学者,我只想将我自己最近研究的一些东西给大家分享一下。可能有些大牛觉得很白痴,但是还是请鼓励一下吧。谢谢。应用部署:第一步:   在IDE上创建一个普通的web工程。在Eclipse界面通过window->showview->other,然后搜索"Servers",然后打开这个窗口。(这个步骤本可以不说,大家懂的。)如图:第二步:  &nb...
当地较为有名的狠人 当地较为有名的狠人·2020-03-29

Javascript导航菜单13则

来源:http://www.noupe.com/ajax/13-awesome-java-script-css-menu.html翻译:http://parandroid.com下面为你准备了13个利用Javascript实现的网页导航菜单1)SexySlidingMenu-基于mootools的Javascript网页导航菜单,漂亮的滑动门技术,看到下面的图了没有,用它来设计你的Sidebar,非常之炫,Sexy,是的。Demo:MootolsVersionDemo:Script.aculo.usVersion2)FastFindMenuScript-这个脚本基本动态的Ajax技术,可以让你创建多级嵌套的菜单。Demo:FastFindMenu3)Webber2.0DockMenu-一个典型的Dock类型网页导航菜单。Demo:Webber2.0DockMenu4)Phatfusion-ImageMenu-这这是一个使用Javascript的图片导航菜单,它最大的特点是除了悬浮展开图片链接之外,还保持当前选定的菜单链接状态。Demo:Phatfusion-ImageMenuDemo:...
当地较为有名的狠人 当地较为有名的狠人·2020-03-29

[转]Javascript模块化编程(三):require.js的用法

来自 阮一峰http://www.ruanyifeng.com/blog/2012/10/asynchronous_module_definition.html这个系列的第一部分和第二部分,介绍了Javascript模块原型和理论概念,今天介绍如何将它们用于实战。我采用的是一个非常流行的库require.js。一、为什么要用require.js?最早的时候,所有Javascript代码都写在一个文件里面,只要加载这一个文件就够了。后来,代码越来越多,一个文件不够了,必须分成多个文件,依次加载。下面的网页代码,相信很多人都见过。  <scriptsrc="1.js"></script>  <scriptsrc="2.js"></script>  <scriptsrc="3.js"></script>  <scriptsrc="4.js"></script>  <scriptsrc="5.js"></script>  <scriptsrc="6.js"&g...
当地较为有名的狠人 当地较为有名的狠人·2020-03-29

[转]Javascript模块化编程(二):AMD规范

来自阮一峰http://www.ruanyifeng.com/blog/2012/10/asynchronous_module_definition.html这个系列的第一部分介绍了Javascript模块的基本写法,今天介绍如何规范地使用模块。(接上文)七、模块的规范先想一想,为什么模块很重要?因为有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块。但是,这样做有一个前提,那就是大家必须以同样的方式编写模块,否则你有你的写法,我有我的写法,岂不是乱了套!考虑到Javascript模块现在还没有官方规范,这一点就更重要了。目前,通行的Javascript模块规范共有两种:CommonJS和AMD。我主要介绍AMD,但是要先从CommonJS讲起。八、CommonJS2009年,美国程序员RyanDahl创造了node.js项目,将javascript语言用于服务器端编程。这标志"Javascript模块化编程"正式诞生。因为老实说,在浏览器环境下,没有模块也不是特别大的问题,毕竟网页程序的复杂性有限;但是在服务器端,一定要有模块,与操作系统和其他应用程序互动,否则...
当地较为有名的狠人 当地较为有名的狠人·2020-03-29

[转]Javascript模块化编程(一):模块的写法

来自阮一峰http://www.ruanyifeng.com/blog/2012/10/javascript_module.html 随着网站逐渐变成"互联网应用程序",嵌入网页的Javascript代码越来越庞大,越来越复杂。网页越来越像桌面程序,需要一个团队分工协作、进度管理、单元测试等等......开发者不得不使用软件工程的方法,管理网页的业务逻辑。Javascript模块化编程,已经成为一个迫切的需求。理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块。但是,Javascript不是一种模块化编程语言,它不支持"类"(class),更遑论"模块"(module)了。(正在制定中的ECMAScript标准第六版,将正式支持"类"和"模块",但还需要很长时间才能投入实用。)Javascript社区做了很多努力,在现有的运行环境中,实现"模块"的效果。本文总结了当前"Javascript模块化编程"的最佳实践,说明如何投入实用。虽然这不是初级教程,但是只要稍稍了解Javascript的基本语法,就能看懂。一、原始写法模块就是实现特定功能的一组方法。...
当地较为有名的狠人 当地较为有名的狠人·2020-03-29

Eclipse3.5的数据库插件

好久不写了,最近开发了一个插件,是eclipse连接数据库的,暂时就开发了mysql支持,比较简陋,后续版本我会把所有的功能都进行完善,争取加上hibernate的支持和数据编辑的功能,也争取一个月更新一次。是eclipse3.5上运行的。将来会开放到code.google.com上面。     hehe,好了,暂时就做了这些,等过几天再出一个新版本,直接替换就可以那种。 ...
当地较为有名的狠人 当地较为有名的狠人·2020-03-29

有趣的JavaScript原型链

原文地址:http://www.mollypages.org/misc/js.mp 所有的实例对象都继承了创建它们的构造函数的原型对象。Mozilla/Konqueror浏览器实现了一个特殊的__proto__属性来指向构造函数(用来创建属于该原型对象类型的实例对象的函数)的原型对象。别去纠结有没有这么一个小小的__proto__属性,我们的思路就是要所有的实例对象能够使用它们的构造函数所指向的原型对象。这个属性是prototype,它是JavaScript标准的一部分。prototype对象默认都有一个constructor属性反向指向了以该prototype对象作为原型的构造函数。prototype对象只为构造函数创建出来的实例对象继承属性所用,构造函数自己却并不使用它(但既然该构造函数自己也是一个对象,那么它也会继承它的构造函数的原型,一般是javascript系统的Function对象)。functionFoo(){};varf1=newFoo();Foo.prototype.x="hello";f1.x//=>helloFoo.x//=>undefine...
当地较为有名的狠人 当地较为有名的狠人·2020-03-29

(入门)什么是AOP?什么是代理模式?怎么设计日志拦截器?

 什么是AOP(Aspect Oriented Programming)?  面向切面编程(也叫面向方面编程):Aspect Oriented Programming(AOP),是目前软件开发中的一个热点,也是Spring框架中的一个重要内容。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。  主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等。  主要的意图是:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改  变这些行为的时候不影响业务逻辑的代码。  AOP的底层实现技术是JDK动态代理。可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式(GoF强调的是接口或抽象类在实际案例中的灵活应用和智慧)的延续,设计模式孜孜不倦追求的是调用者和被调用者之...
当地较为有名的狠人 当地较为有名的狠人·2020-03-29
首页上一页...435436437438439...下一页尾页