地址必须64位对齐,这个编程怎么实现?

leehh 2011-08-23 06:13:14
我现在在uboot下做一个接口的驱动,有一个寄存器地址说要64位对齐,我在程序里申请了一个32位的指针,但此时不是已经有地址了么?我怎么保证它是64位对齐的呢?

我把这个指针的地址打印出来看了下为0xc10c278c,这个应该没有64位对齐吧?
...全文
377 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
AnYidan 2011-08-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 mymtom 的回复:]
C/C++ code

ptr_save = malloc();
ptr = (ptrsave + 7) & ~7
[/Quote]

++
didijiji 2011-08-24
  • 打赏
  • 举报
回复
听明白你的意思了,但是不知道该怎么实现。
leehh 2011-08-24
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 bjtbjt 的回复:]

不知道具体是什么对齐

[/Quote]

很多人没明白我说的是什么对齐,其实这个寄存器是一块内存的首地址,要求内存空间8字节对齐。
5t4rk 2011-08-23
  • 打赏
  • 举报
回复
不知道具体是什么对齐
proorck6 2011-08-23
  • 打赏
  • 举报
回复
int x;
x=x/64*64;
你要的是这个么?
2011-08-23
  • 打赏
  • 举报
回复
晕,没看到你用的是 uboot……

如果没有合适的库函数的话,就像 #6 楼那样多分配 7 个字节然后手动对齐吧……
2011-08-23
  • 打赏
  • 举报
回复
icemornings 2011-08-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 mymtom 的回复:]

C/C++ code

ptr_save = malloc();
ptr = (ptrsave + 7) & ~7
[/Quote]
++
吾子墨鸿 2011-08-23
  • 打赏
  • 举报
回复
在头文件里面包含
#pragma (8)
就可以了
wangw89 2011-08-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 0153 的回复:]
一般可以这么做:
原指针 = 分配(预订字节数+8);
实际指针 = ((原指针 >> 3) + 1) << 3;
...
外部寄存器 = 实际指针;
...
释放(原指针);
[/Quote]嗯
0153 2011-08-23
  • 打赏
  • 举报
回复
一般可以这么做:
原指针 = 分配(预订字节数+8);
实际指针 = ((原指针 >> 3) + 1) << 3;
...
外部寄存器 = 实际指针;
...
释放(原指针);
mymtom 2011-08-23
  • 打赏
  • 举报
回复

ptr_save = malloc();
ptr = (ptrsave + 7) & ~7
nightkids_008 2011-08-23
  • 打赏
  • 举报
回复
#pagrma
leehh 2011-08-23
  • 打赏
  • 举报
回复
不好意思,datasheet里是这么说的:
The address can reside in any available memory space,but it must be aligned to a 64-bit boundary.
我上面的理解有问题吗?
ringer564597 2011-08-23
  • 打赏
  • 举报
回复
哎。。你说的对齐是什么意思。。
ringer564597 2011-08-23
  • 打赏
  • 举报
回复
struct 自动对齐
CJacky++ 2011-08-23
  • 打赏
  • 举报
回复
帮顶,问题看得不是很清楚。水平不高,帮不了。

70,039

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧