首页 > 编程知识 正文

两独立样本t检验公式,索引查找算法

时间:2023-05-05 08:28:26 阅读:61272 作者:2293

TLSF算法1:二次索引的计算一、TLSF算法二是什么、f的确定三、s的确定四、实验结果

一.什么是TLSF算法

在嵌入式系统中,内存需要适当的时间来分配和释放,以进一步分析实际任务的可调度性。 因此,TLSF算法是一种非常适合嵌入式领域的动态内存分配算法。 在关于TLSf算法的经典文章中,《TLSF: a New Dynamic Memory Allocator for Real-Time Systems》详细介绍了TLSf算法的相关知识。

TLSF算法使用隔离匹配机制实现良好的匹配策略。 基本的隔离匹配机制使用一组空闲列表,每个数组都包含一定大小范围内的ajdsc。 为了访问和管理大量隔离列表,以加快对ajdsc的访问并减少碎片,将列表数组组织为两个级别的数组。 一级数组将ajdsc划分为类为2的幂(16、32、64、128等)。 和级别2按级别1类别进行线性划分,划分数(级别2索引数,2SLI )是用户可以设置的参数。 每个数组列表都有一个关联的位图,用于标记哪些列表为空,哪些列表包含ajdsc。 有关每个块的信息存储在块本身中。

在TLSf的结构中,最主要的算法是位的操作,本文重点分析位操作的原理和代码。 如果需要分配指定大小的r内存,则必须计算相应的l2位图值。 公式如下。

为了得到直观的结果,假设SLI=4。 即,如果将第2级索引为1级的存储块大小范围分割为2SLI=16块,则1级索引f=8、2级索引s=12。

第二,我们发现f的值是需要的内存大小的二进制位的最高0位以外的数。 首先,最简单的操作是“从低位开始遍历即可,不断对r进行”,只要r不为0,就不断执行,同时定义一个变量来计数移位次数。 但是,由于是嵌入式系统,当然不能采用遍历的方法,会导致存储器分配的不确定性。

方法一首先考虑折半查找的方式,32位的数字,折半对比5次既可求出f的值。代码参考如下:

intgetF1(intr ) {int f=0; if (! r () {返回0; (if ) r0xffff0000 ) {r=16; f =16; (if ) r0xff00 ) r=8; f =8; (if ) r0xf0) r=4; f =4; (if ) r12 ) r=2; f =2; (if ) R2 ) R=1; f =1; }返回f; } 方法二:方法一需要进行6次比较,消耗时间较旧,因此采用空间换时间的方式,一个有8个bit位的数,可以通过一个数组索引出来28=256个数最高的位是几,最后就可以通过查表快速得知最高的bit位数。索引数组的初始化如下:

int TLSF_Table[256]; int i; int j=0; int k=0; TLSF_Table[0]=0xffffffff; for(I=2; i=256; i=i*2,k () for ); ji; j({tlsf_table[j]=k; }此时,进行2次比较后,发现通过查找表和移位运算可以迅速决定对应的f值。

intgetF2(intr ) {int a,f; a=r=0xffff? (r=0xff? 0 : 8) :(r=0xffffff? 16 : 24; f=TLSF_Table[r a] a; 返回f; (三、s的确定从公式中可以看出,s、f、SLI都有关系。 当然先求出f,如果SLI是已知的,就可以自然地通过计算求出s的值。方法一,直接通过公式完成相应的计算即可:

intgets1(intr,int f ) return(r-(1f ) ) f-SLI; } http://www.Sina.com/http://www.Sina.com /

intgets2(intr,int f ) return(r(f-sli ) )-(1sli ); (四、实验结果实现上述几个计算函数后,在main函数中添加测试数据进行验证。 整个程序代码如下。

# include stdio.hstaticinttlsf _ table [ 256 ]; 静态int sli=4; intgetF1(intr ) {int f=0; if (! r () {返回0; (if ) r0xffff0000 ) {r=16; f =16; (if ) r0xff00 ) r=8; f =8; (if ) r0xf0) r=4; f =4; (if ) r12 ) r=2; f =2; (if ) R2 ) R=1; f =1; }返回f; (intgetF2) {int a ) {int a; a=r=0xffff? (r=0xff? 0 : 8) :(r=0xffffff? 16 : 24; 返回tlsf _ table [ r a ] a; (intgets1) int f,int f ) return ) r-(1f ) ) f-SLI ); (intgets2) int f,int f ) return ) r(f-sli ) (-(1sli ); }main () {int i; int j=0; int k=0; TLSF_Table[0]=0xffffffff; for(I=2; i=256; i=i*2,k () for ); ji; j({tlsf_table[j]=k; }}int a=460; INTF1=getF1(a; INTF2=GETF2(a; printf (计算机(n ) ); printf (firstmethodgetf : % dn ),f1 ); printf (第二次会议: % dn ',f2 ); printf (计算(n ) ); printf (firstmethodgets : % d (n ),getS1(a ) a,f1 ); printf (第二阶段操作系统: % d (n ),getS2(a ) a,f2 ); }程序的执行结果如下。

对于内存要求r=460,验证结果如预期。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。