当前位置:  编程技术>综合
本页文章导读:
    ▪ubuntu 下配置Lua      1.下载安装包 去http://www.lua.org/ftp/,最新的是5.21版本,单击下载就Ok。 2.安装一些工具 终端运行 sudo apt-get install libreadline5 sudo apt-get install libreadline-gplv2-dev 3.安装 解压之前下载好的安装包,.........
    ▪似曾相似?值类型与引用类型的区别及其转换          值类型与引用类型的区别 在上一篇中,简单的总结了下值类型与引用类型的基本概念.下图是总结的一张表 关于内存的分配问题,这些堆和栈的概念,我都是不是很懂.类.........
    ▪Android binder from Top to Bottom      本文分六部分介绍Android binder机制和结构; 理解和行文难免有误, 一切以代码为准. 转载请注明出处. Android Binder机制之RefBase & smart pointer 在组件技术中必然需要引用计数的机制,用于控制指.........

[1]ubuntu 下配置Lua
    来源: 互联网  发布时间: 2013-11-19

1.下载安装包

去http://www.lua.org/ftp/,最新的是5.21版本,单击下载就Ok。

2.安装一些工具

终端运行

sudo apt-get install libreadline5
sudo apt-get install libreadline-gplv2-dev

3.安装

解压之前下载好的安装包,终端cd进入目录

运行

make linux
sudo make install

Lua就装好了。


4.测试

直接在终端输入Lua,回车,就可以看到版本信息,Helloworld之要一行语句就搞定了,就像下面这样:


也可以写成单个文件来运行,例如求下面这个例子,求Fabnacci数列。

function fact( n )
	if n==0 then
		return 1
	else
		return n*fact(n-1)
	end
end
print("enter a number:")
--read a number
a=io.read("*number")	
print(fact(a))

终端运行,结果如下:



参考:Programming in lua 2rd


作者:qp120291570 发表于2013-1-13 21:33:25 原文链接
阅读:0 评论:0 查看评论

    
[2]似曾相似?值类型与引用类型的区别及其转换
    来源: 互联网  发布时间: 2013-11-19

   值类型与引用类型的区别

在上一篇中,简单的总结了下值类型与引用类型的基本概念.下图是总结的一张表




关于内存的分配问题,这些堆和栈的概念,我都是不是很懂.类似一个篮子,里面可以放各式各样的东西.这里就是用来放置

不同类型的数据,先大致这样来理解下.以后要用到的时候再去研究,如果有兴趣大家看看这个堆栈或许能明白.

主要区别

值类型的变量包含自身的数据,而引用的数据类型包含指向数据的内存块引用.读到这里,让我想起了VB时代里,byref和

byval.这两种不同的传值方式.接着来说值类型和引用类型,值类型对于每个变量都有一份自己的数据拷贝,则在使用数

据的时候,不会因为对一个数据的操作去影响另一个数据;而在引用类型中,可以通过对一个变量的操作来影响另一个变

量的引用的对象.

来看一个例子,或许更生动点

namespace _1  
{  
    class ValueClass            //定义类  
    {  
        public int value = 0;  
    }  
    class ValueAndRefType            //定义类  
    {  
        public static void Main()    //方法  
        {  
            int a = 0;              //a的初始变量未整型0  
            int b = a;  
            b = 10;  
            ValueClass ref1 = new ValueClass();    //创建类对象ref1  
            ValueClass ref2 = ref1;               //创建类对象ref2,并赋值ref1  
            ref2.value = 10;  
            Console.WriteLine("Value:{0},{1}", a, b);     //对变量ref2重新赋值  
            Console.WriteLine("Refs:{0},{1}", ref1.value, ref2.value); //通过ref2重新赋值,影响了ref1和ref2所引用对象  
        }  
    }  
}  
运行结果:
                     Value:0,1
                     Refs:10,10

在这里例子中,大家看到对局部变量a、b初始化后,b重新赋值并没有影响a的值。a仍然是0.而当我们将ref2的值赋上

10后,则影响了ref1和ref2所引用的对象,也就影响了ref1的值。也就出现了refs:10,10.


装箱和拆箱

装箱就是将值类型转换为引用类型,反之就是将引用类型转换为值类型。类似于VB中的转换函数。


装箱操作

将值类型转换为object类型,是一个数值分配给一个对象实例,并将这个数值拷贝到新对象中。

int num =2012;

object obj =num;

如上,创建一个整数类型的变量num后。第二行中,就将其拷贝到obj的引用类型中。上述的语句就是在堆栈种创建一

个对象obj,而该对象引用了堆栈上的int类型数值。

拆箱操作

也即是将obj类型转换为值类型。

int num=2012;

object obj=num;

int num1=(int)obj;

比较着两段代码,大家可以看到。在拆箱过程中,仅仅多了最后一个强制转换。这是为什么呢?哦,这是因为在

拆箱情况下,一个对象可以强制转换到任何类型。因此必须使用强制转换。


综上,无论是值类型与引用类型的区别还是转换。大家都可以从VB的知识中,找到相关的影子。在接下来的学

习中,应该会有很多的知识都是可以联系到我们的VB知识的。有种似曾相似,原来就是你!

作者:chenfanglincfl 发表于2013-1-13 21:12:34 原文链接
阅读:44 评论:0 查看评论

    
[3]Android binder from Top to Bottom
    来源: 互联网  发布时间: 2013-11-19

本文分六部分介绍Android binder机制和结构; 理解和行文难免有误, 一切以代码为准.

转载请注明出处.

Android Binder机制之RefBase & smart pointer

在组件技术中必然需要引用计数的机制,用于控制指针所指向的本端代理对象和所对应的远端进程内的组件对象的生命周期。

LPC通用行为和smart pointer

如同Windows COM二进制兼容跨进程接口调用机制,LPC(Local Procedure Call)三要素:

QueryInterface

AddRef/ReleaseRef

Method Invoke

另外,实现上对于本进程内的组件,要可以直接引用,这关乎运行效率。这也是LPC实现普遍要考虑的一个点(特别是用socket实现时)。

对于Android Binder Framework,Interface Query由ServiceManager负责,AddRef/ReleaseRef由RefBase计数负责;Method Invoke由对应Service的Interface和Binder负责。

正是因为组件有计数功能,smart pointer的“smart”才有了着落,即通过指针对象自身的生命周期来增减引用的组件的计数,从而控制组件的生命周期。

在Android中,android::RefBase及其派生类负责计数,而smart pointer(sp<T>和wp<T>)负责所引用对象的计数增减的调用。下面将分别从对象角度和指针角度来考察android binder需求而引入的计数机制。

RefBase和sp/wp的静态关系如下图(此图从网络引来):

计数的祖宗---基类RefBase和LightRefBase

实现计数的对象的类是RefBase和LightRefBase。绝大多数情况下的类是继承自RefBase。

RefBase虽然借助关联的嵌套类对象实现了强引用计数和弱引用计数,但是对外只表露出了增减强引用计数的方法(如incStrong、decStrong)。

LightRefBase的Light表现在只实现强引用计数,没有弱引用计数!LightRefBase主要用在OpenGL ES需要的FrameBuffer NativeWindow实现中。

RefBase的设计原则

1. 因为调用incStrong/decStrong的时候,需要相应地调用incWeak/decWeak,如果表露出incWeak/decWeak就需要外部遵循不同情景的调用规则,可能会导致计数的混乱,所以incWeak/decWeak尽量不对外使用,内部实现类维护。

2. incStrong/decStrong表露出来是因为有些情况,直接由普通指针调用,否则,都不应该表露出,而是应该sp<T>友元类访问即可。

3. RefBase既然需要对象的强引用计数和弱引用计数,由于强引用指针和弱引用指针的相互引用和相互赋值及弱引用提升为强引用,所以,为了设计的方便和运行的效率,强/弱引用计数及其操作的内部实现又不能过于独立。

4. 弱引用计数接口(android::RefBase::weakref_type)供弱引用计数实现使用,需要分离出来。

综上设计原则,于是有了Android RefBase的略显怪胎式的实现:

In  frameworks/base/include/utils/RefBase.h

class RefBase

{

public:

            void            incStrong(const void* id) const;

            void            decStrong(const void* id) const;

   

            void            forceIncStrong(const void* id) const;

 

            //! DEBUGGING ONLY: Get current strong ref count.

            int32_t         getStrongCount() const;

 

    class weakref_type

    {

    public:

        RefBase*            refBase() const;


    
最新技术文章:
▪error while loading shared libraries的解決方法    ▪版本控制的极佳实践    ▪安装多个jdk,多个tomcat版本的冲突问题
▪简单选择排序算法    ▪国外 Android资源大集合 和个人学习android收藏    ▪.NET MVC 给loading数据加 ajax 等待loading效果
▪http代理工作原理(3)    ▪关注细节-TWaver Android    ▪Spring怎样把Bean实例暴露出来?
▪java写入excel2007的操作    ▪http代理工作原理(1)    ▪浅谈三层架构
▪http代理工作原理(2)    ▪解析三层架构……如何分层?    ▪linux PS命令
▪secureMRT Linux命令汉字出现乱码    ▪把C++类成员方法直接作为线程回调函数    ▪weak-and算法原理演示(wand)
▪53个要点提高PHP编程效率    ▪linux僵尸进程    ▪java 序列化到mysql数据库中
▪利用ndk编译ffmpeg    ▪活用CSS巧妙解决超长文本内容显示问题    ▪通过DBMS_RANDOM得到随机
▪CodeSmith 使用教程(8): CodeTemplate对象    ▪android4.0 进程回收机制    ▪仿天猫首页-产品分类
▪从Samples中入门IOS开发(四)------ 基于socket的...    ▪工作趣事 之 重装服务器后的网站不能正常访...    ▪java序列化学习笔记
▪Office 2010下VBA Addressof的应用    ▪一起来学ASP.NET Ajax(二)之初识ASP.NET Ajax    ▪更改CentOS yum 源为163的源
▪ORACLE 常用表达式    ▪记录一下,AS3反射功能的实现方法    ▪u盘文件系统问题
▪java设计模式-观察者模式初探    ▪MANIFEST.MF格式总结    ▪Android 4.2 Wifi Display核心分析 (一)
▪Perl 正则表达式 记忆方法    ▪.NET MVC 给loading数据加 ajax 等待laoding效果    ▪java 类之访问权限
▪extjs在myeclipse提示    ▪xml不提示问题    ▪Android应用程序运行的性能设计
▪sharepoint 2010 自定义列表启用版本记录控制 如...    ▪解决UIScrollView截获touch事件的一个极其简单有...    ▪Chain of Responsibility -- 责任链模式
▪运行skyeye缺少libbfd-2.18.50.0.2.20071001.so问题    ▪sharepoint 2010 使用sharepoint脚本STSNavigate方法实...    ▪让javascript显原型!
▪kohana基本安装配置    ▪MVVM开发模式实例解析    ▪sharepoint 2010 设置pdf文件在浏览器中访问
▪spring+hibernate+事务    ▪MyEclipse中文乱码,编码格式设置,文件编码格...    ▪struts+spring+hibernate用jquery实现数据分页异步加...
▪windows平台c++开发"麻烦"总结    ▪Android Wifi几点    ▪Myeclipse中JDBC连接池的配置
▪优化后的冒泡排序算法    ▪elasticsearch RESTful搜索引擎-(java jest 使用[入门])...    ▪MyEclipse下安装SVN插件SubEclipse的方法
▪100个windows平台C++开发错误之七编程    ▪串口转以太网模块WIZ140SR/WIZ145SR 数据手册(版...    ▪初识XML(三)Schema
▪Deep Copy VS Shallow Copy    ▪iphone游戏开发之cocos2d (七) 自定义精灵类,实...    ▪100个windows平台C++开发错误之八编程
▪C++程序的内存布局    ▪将不确定变为确定系列~Linq的批量操作靠的住...    ▪DIV始终保持在浏览器中央,兼容各浏览器版本
▪Activity生命周期管理之三——Stopping或者Restarti...    ▪《C语言参悟之旅》-读书笔记(八)    ▪C++函数参数小结
▪android Content Provider详解九    ▪简单的图片无缝滚动效果    ▪required artifact is missing.
▪c++编程风格----读书笔记(1)    ▪codeforces round 160    ▪【Visual C++】游戏开发笔记四十 浅墨DirectX教程...
▪【D3D11游戏编程】学习笔记十八:模板缓冲区...    ▪codeforces 70D 动态凸包    ▪c++编程风格----读书笔记(2)
▪Android窗口管理服务WindowManagerService计算Activity...    ▪keytool 错误: java.io.FileNotFoundException: MyAndroidKey....    ▪《HTTP权威指南》读书笔记---缓存
▪markdown    ▪[设计模式]总结    ▪网站用户行为分析在用户市场领域的应用
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3