LCC中的内存管理-对齐

很久不学,都快忘了有对齐(align/alignment)这个概念。

struct A

{

char a;

int b;

shot c;

}aa;

sizeof aa 是多少?如果不知道答案是12,请看这里

malloc返回的是对齐过的地址,LCC中内存管理中,用allocate函数申请内存时,返回的也是对齐过的地址。

实现对齐用到了一个union:

 

union align {

long l;

char *p;

double d;

int (*f)(void);

};

申请x个字节的内存:

x = roundup(x, sizeof (union align));

sizeof (union align)得到的是host机器默认对齐值,目前IA32一般是8,即按照8来对齐,使得x能被8整除。

roundup是个宏:

#define roundup(x,n) (((x)+((n)-1))&(~((n)-1)))

此宏运算得到的是不小于x的能被n整除的最小正整数。

如果n=8,x要能被8整除,则x的二进制表示最低三位要为0,&(~((n)-1))即实现此目的。

UltraEdit恢复右键菜单

很习惯对于一个文件,尤其是没后缀的、其他平台的,直接右键,UE打开。觉得这个很方便。

右键菜单有时会消失,手动加上即可:

新建文本文件,内容:

 

Windows Registry Editor Version 5.00 

[HKEY_CLASSES_ROOT\*\shell] 

[HKEY_CLASSES_ROOT\*\shell\UltraEdit] 

@="UltraEdit" 

[HKEY_CLASSES_ROOT\*\shell\UltraEdit\Command] 

@="D:\\UltraEdit\\Uedit32.exe %1"

 

存为.reg文件,双击,搞定。

第一个@引号里的是右键时显示的内容,第二个@引号里面的是可执行程序的位置,%1应该是参数占位符,点击时会把你所点击的文件传给UE,UE便打开这个文件。

想把图标也加上去,看其他的都是放在shellex下面的,想模仿一下,没弄明白键值什么意思,怎么得到。

Android修改ramdisk

ramdisk.img是zip压缩的cpio归档文件,查看它:

#gzip -d -S .img ramdisk.img 

创建文件夹tmp,copy ramdisk到tmp,便于修改,cd进tmp去,

#cpio -i -F ramdisk

得到ramdisk中的内容,对内容可做修改,修改完后,移除开始的ramdisk,然后,

#cpio -i -t -F ../ramdisk | cpio -o -H newc -O ../ramdisk_new

得到修改后的ramdisk_new,gzip之,得到可用的新的ramdisk.img。

More at:Click me

Android repo

Repo是一个python脚本,被设计用来更简单的获取Android源码,其核心也是使用Git来获取源码。

A. 创建~/bin目录,并将其加入PATH环境变量

   cd ~           (进入用户目录)

   mkdir bin       (创建bin文件夹)

   sudo gedit ~/.bash_profile      (打开.bash_profile文件,在其中加入PATH=$PATH:~/bin)

   . ~/.bash_profile      (使环境变量改变马上生效)

   echo $PATH         (再次检查~/bin是否已经加入PATH环境变量)

B. 下载repo脚本,并将它的属性改为可执行

   curl http://android.git.kernel.org/repo > ~/bin/repo         (下载repo)

   chmod a+x ~/bin/repo                                (更改属性)

C. 创建一个保存源码的目录

   mkdir Android        (创建Android目录)

   cd Android            (进入Android目录)

D. 初始化repo工作环境,获取最新的工程清单。

   repo init -u git://android.git.kernel.org/platform/manifest.git

   其中会提示输入姓名和电子邮件,如果需要上传源码到Android项目,请使用gmail的邮箱。

E. 完成

   初始化完成以后,会有一个类似于下面的提示。

   repo initialized in ~/Android

   这时Android目录下面会有一个.repo目录,里面包含Android各个子项目的清单(Manifest)以及其他一些文件。

More At:http://source.android.com/source/git-repo.html

hello world

某程序员对书法十分感兴趣,退休后决定在这方面有所建树。于是花重金购买了上等的文房四宝。

一日,饭后突生雅兴,一番磨墨拟纸,并点上了上好的檀香,颇有王羲之风范,又具颜真卿气势,定神片刻,泼墨挥毫,郑重地写下一行字:hello world。