对于*(mmu_tbl_base)+virtuladdr>>20等的一点理解

原创 2011年01月21日 19:11:00

如下:

unsigned long *mmu_tlb_base = (unsigned long *)0x30000000; 
如果执行mmu_tlb_base=mmu_tlb_base+1,会得到mmu_tlb_base为0x30000004的结果,对于指针的加减操作会将+1自动转换为+指针类型字节数 
(unsigned short *)mmu_tlb_base+1的结果是0x30000002 
(unsigned long)mmu_tlb_base+1的结果是0x30000001 

long指针是4字节对齐,所以+1实际上地址等于+4 
short指针是2字节对齐,所以+1实际上地址等于+2 
long指针是1字节对齐,所以+1实际上地址等于+1 

int不同编译器针对不同硬件平台会得出不同结果,有可能是32位(4字节),也有可能是16位(2字节) 


---------------------------------- 

将一个立即数的值传给指针前必须加(long *)这样的强制转换是C语言为了防止误操作采取的一种保护措施,不同指针有不同的对齐要求,虽然立即数可以表示出地址的具体数值,但存在一个问题:有可能给一个不满足对齐要求的值给long这样有对齐要求的指针,这样会出错,如果语法上要求必须强制转换,可以提醒程序员在该位置留意转换的对齐问题

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

内存管理MMU

一、MMU的产生       许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还...

MMU tlb

1-3、ARM开发步步深入之MMU初窥 实验目的:启用MMU,映射SDRAM的地址空间,操作虚拟地址实现“点灯大法”,借此掌握MMU的使用。 实验环境及说明:恒颐S3C2410开发板H2410...
  • prike
  • prike
  • 2016-06-01 10:55
  • 557

S3C2440之MMU操作(MDK4.22)

关于MMU知识: 1.ARM CPU上的地址转换过程涉及到了3个概念,虚拟地址VA,变换地址MVA,物理地址PA。当没有启动MMU的时候,CPU核,CACHE,MMU见到的都是PA。 启动MMU之...

[嵌入式Linux应用开发完全手册][韦东山]讲解MMU的时候,构造段描述符地址的语句是否有误

求助]这本书在讲解MMU的时候,构造段描述符地址的语句是否有误~!? 我指的是例子代码那里,例如: *(mmu_tlb_base+virtuladdr>>20) 书上就是这样构造一级页表的段描述...

【补充】 关于*(mmu_tlb_base + (virtuladdr >> 20))的理解

对于MVA到PA转换过程,以及描述符所扮演的角色,请看下图: 来看代码:unsigned long virtuladdr, physicaladdr; unsigned long *mmu_tlb_...

关于韦东山MMU实验

这本书在讲解MMU的时候,构造段描述符地址的语句是否有误~!? 我指的是例子代码那里,例如: *(mmu_tlb_base+virtuladdr>>20) 书上就是这样构造一级页表的...

关于韦东山MMU实验

[求助]这本书在讲解MMU的时候,构造段描述符地址的语句是否有误~!?我指的是例子代码那里,例如:*(mmu_tlb_base+virtuladdr>>20)书上就是这样构造一级页表的段描述符存储地址...

嵌入式裸机开发学习:MMU代码中的virtuladdr >> 20 的个人理解

看到韦东山书中MMU部分

g.hibernate.hql.ast.QuerySyntaxException: tbl_base_count is not mapped [SELECT COUNT(*) FROM tbl_bas

Hibernate: select user0_.ID as ID2_, user0_.ADMIN as ADMIN2_, user0_.ENABLED as ENABLED2_, user0_.JB...

从PTS理解MMU的使用

  • 2009-10-27 20:56
  • 632KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)