对于*(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_tlb_base + (virtuladdr >> 20))的理解

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

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
  • 下载

MPC8640 MMU vxworks理解

  • 2014年01月22日 22:10
  • 109KB
  • 下载

OpenSSL RSA AES Base64的一点注意事项

这两天弄加密和解密的内容,需要openssl(cocos2dx带有curl用到了openssl)的rsa和aes与java匹配,用base64测试,同时绑定到lua,遇到一些问题记录一下。     ...

我对Go语言一点理解

  • 2014年05月29日 14:10
  • 944KB
  • 下载

ARM中MMU地址转换理解

MMU的段页表的虚拟地址与物理地址的转换过程

关于MMU与各种地址的理解

如何描述一个MMU ( Memory Management Unit ) 内存管理单元。 目的(功能):对于程序而言,为了将程序分割成一张张的卡片(页面),然后再运行的时候将需要的部分嵌入到物理内存的...

5、ARM中MMU地址转换理解

首先,我们要分清ARM CPU上的三个地址:虚拟地址(VA,Virtual Address)、变换后的虚拟地址(MVA,Modified Virtual Address)、物理地址(PA,Physic...
  • mianyy
  • mianyy
  • 2011年08月23日 14:27
  • 329
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对于*(mmu_tbl_base)+virtuladdr>>20等的一点理解
举报原因:
原因补充:

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