当前位置: 技术问答>linux和unix
帮忙看看这个程序的用途吧
来源: 互联网 发布时间:2015-09-14
本文导语: int compensate_124(addr) char *addr; { int mask; if (cpu_type == 1) return(0); if (cpu_type == 2 || cpu_type == 4) { mask = (cpu_type - 1) & (int)addr; if (mask > 0) return(cpu_type - mask); else ...
int compensate_124(addr)
char *addr;
{
int mask;
if (cpu_type == 1)
return(0);
if (cpu_type == 2 || cpu_type == 4)
{
mask = (cpu_type - 1) & (int)addr;
if (mask > 0)
return(cpu_type - mask);
else
return(0);
}
else
return(0);
}
cpu_type 是int类型的长度。
这个程序有谁知道是有啥用的 ?
char *addr;
{
int mask;
if (cpu_type == 1)
return(0);
if (cpu_type == 2 || cpu_type == 4)
{
mask = (cpu_type - 1) & (int)addr;
if (mask > 0)
return(cpu_type - mask);
else
return(0);
}
else
return(0);
}
cpu_type 是int类型的长度。
这个程序有谁知道是有啥用的 ?
|
应该是CPU 字节对齐的问题吧。
传一个地址,根据当前cpu字节对齐方式(1字节对齐,2字节对齐,4字节对齐),返回值是该地址要达到对齐的要求需要的字节增量。
传一个地址,根据当前cpu字节对齐方式(1字节对齐,2字节对齐,4字节对齐),返回值是该地址要达到对齐的要求需要的字节增量。
|
这好像是一个结构的字节补偿函数,以前我们用PC机读取老式的16位ALPHA 机(16位字长的CPU)存储的结构文件时,由于不同字长的CPU在处理结构中的成员地址时,分配的地址单元并不相同,写成文件时的结构长度也不一样,需要在读取后进行字节补齐。从
if (cpu_type == 1)
return(0);
判断,原始记录方式是按1字节方式记录的。
if (cpu_type == 1)
return(0);
判断,原始记录方式是按1字节方式记录的。
|
比较浅显的就是这个函数是用于对不同的cpu_type分别做一些处理,至于为什么要这样做,要看到程序的其他相关部分才看得出来