内存对齐,不是说结构,而是如何将一个变量,在编译成binary时,如何让这个变量的偏移按指定的字节对齐

WYlslrt 2006-01-03 01:16:17
rt
...全文
264 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
rorl 2006-01-22
  • 打赏
  • 举报
回复
做嵌入式开发的xdjm应该知道吧
我和他们接口,他们都是告诉我某某共享变量的绝对地址是0xXXXX
VxD1 2006-01-21
  • 打赏
  • 举报
回复
可以求助于汇编语言
不太明白楼主的意思,不过我以下说的这种方法是否对你有帮助呢?

char a;
char b;
char c;

在char型占一字节,而int占二字节的系统中,可以把b与c全并为一个int型变量
(int) b 就占据了b和c的空间
sankt 2006-01-20
  • 打赏
  • 举报
回复
学习
red-fly 2006-01-20
  • 打赏
  • 举报
回复
这个好象不太好弄吧
zengwujun 2006-01-07
  • 打赏
  • 举报
回复
内嵌汇编行不行?
jixingzhong 2006-01-07
  • 打赏
  • 举报
回复
如果是要 让数据 按照自己的设计精确 分配在一个内存空间中 ...

可能就比较麻烦了 ..
可以考虑用 位段的方式,
问题是要一个一个变量去计算 占用的空间大小,
然后还要定义出来 ...
所以可行性很小 ....
jixingzhong 2006-01-07
  • 打赏
  • 举报
回复
不是很明白楼主的意思 ..

内存对齐的化,一般就是用 pack(n) 实现 ...
(当然还有其他的类似的手段可以实现的)
WYlslrt 2006-01-03
  • 打赏
  • 举报
回复
谢谢楼上各位
benjaming1981 2006-01-03
  • 打赏
  • 举报
回复
据我所知,c编译器没有内存对齐功能。
我在做嵌入式设备驱动时,碰到过这问题。

你可以先在内存中,申请一大块空间A,
然后,把A 以你所要的字节对齐

以后程序需要空间时,就可以从A中申请。

如,需要四字节对齐
unsigned char *p = (unsigned char*)malloc(100);
unsigned char *savedp = p;//把初始内存指针保存起来,释放时用
p = p&0xfffffff0;
写个函数重p中申请 和 释放空间,就可以了

这种方法当然浪费了,几个字节空间
但没办法
shenmea00000 2006-01-03
  • 打赏
  • 举报
回复
不懂
goodluckyxl 2006-01-03
  • 打赏
  • 举报
回复
预处理是可以的 c是支持 #pack的对齐限制
如果说是在程序中手动的来处理偏移我认为很难做到
一般也做不到
akademecia 2006-01-03
  • 打赏
  • 举报
回复
#pragma pack(4)按4字节对齐,好像GCC里用的是align。是个预处理参数,查看编译器的文档,里面有说明。
yzx1983 2006-01-03
  • 打赏
  • 举报
回复
org ...
我啃 2006-01-03
  • 打赏
  • 举报
回复
好象不支持,C对内存的操作是十分保守的,一般不容许自己定位,好象只能在实现测算出内存的偏移量,不能手动设置偏移量(为了保证安全)可以尝试使用内存THUNK技术,详细的东西参考WRITE SECURE CODE里,这种技术对机器地层要求较严,不推荐使用,还有就是安全性能差。
或者推荐使用C内嵌ASM代码(功底要好)
dragonzxh 2006-01-03
  • 打赏
  • 举报
回复
可以使用位域来操作变量。
比如
class A{
int a:1
}

69,373

社区成员

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

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