摘要: 一.什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问 一个没有进行对齐的变量的时候会发生错误,那么在这种架构下编程必须保证字节对齐.其他平台可能没有这种情况,但是最常见的是如果不按照适合其平台要求对 数据存放进行对齐 阅读全文
posted @ 2011-09-12 18:24 学海拾贝 阅读(430) 评论(0) 推荐(0)
摘要: 一.计算struct的size有两个原则:#pragma pack(n)n是编译器的对齐字节数(1)struct中各成员按照对齐原则:在为当前变量(设为a)分配内存时,要参考之前所有变量的偏移量之和(设为d),d必须是min(n,sizeof(a))的倍数,否则编译器会自动在最后补上缺少的字节数。(2)待所有变量都分配完毕之后,还要比较当前所占内存(设为c)与struct中长度最大的变量的长度(设为b),c必须是b的倍数,否则编译器也会在最后补上缺少的字节数。二.unionunion的长度取决于其中的长度最大的那个成员变量的长度。即union中成员变量是重叠摆放的,其开始地址相同。一篇讲对齐比 阅读全文
posted @ 2011-09-12 18:22 学海拾贝 阅读(196) 评论(0) 推荐(0)
摘要: 在Android中,要模拟SD卡,要首先使用adb的mksdcard命令来建立SD卡的镜像,如何建立,大家上网查一下吧,应该很容易找到,这里不说这个问题.但是在应用程序执行起来以后,我们可以看到sdcard的执行权限很有问题.懂Linux的人都知道,这样的权限是无法在SD开中写入内容的,也就无法建立目录.但是,我们在adb shell命令中,依然可以在sdcard中建立目录,写入文件.这倒是也是见鬼的事情.但是,如果你想把权限更改成777,命令行并不报错,再使用ls -l查看一下,权限依然没有改变过来.我们急中生智,使用su命令将自己变成root用户,在使用chmod 777 sdcard来改 阅读全文
posted @ 2011-09-12 11:14 学海拾贝 阅读(3486) 评论(0) 推荐(0)
摘要: 关于Unix静态库和动态库的分析基本概念库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀。 例如:libhello.so libhello.a为了在同一系统中使用不同版本的库,可以在库文件名后加上版本号为后缀,例如: libhello.so.1.0,由于程序连接默认以.so为文件后缀名。所以为了使用这些库,通常使用建立符号连接的方式。ln -s libhello.so.1.0 libhello.so.1ln -s libhello.so.1 libhello.so1、使用库当要使用静态的程序库时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连 阅读全文
posted @ 2011-09-12 10:34 学海拾贝 阅读(328) 评论(0) 推荐(0)