社区
C语言
帖子详情
内存对齐,不是说结构,而是如何将一个变量,在编译成binary时,如何让这个变量的偏移按指定的字节对齐
WYlslrt
2006-01-03 01:16:17
rt
...全文
264
15
打赏
收藏
内存对齐,不是说结构,而是如何将一个变量,在编译成binary时,如何让这个变量的偏移按指定的字节对齐
rt
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
}
MySQL 主从复制 Replication 详解(Linux 和 W
# MySQL 主从复制工作原理 MASTER将改变记录到二进制日志事件(
binary
log events) SLAVE将MASTER的(
binary
log events)拷贝到它的中继日志(relay log) SLAVE重做中继日志中的事件,将改变反映它自己的数据。...
内存对齐
(Memory alignment)
「
内存对齐
」章节作为struct的
一个
扩充知识。事实也证明,实际开发中,关注
结构
体内存布局特性的同事寥寥无几。甚至某些同事表示从未去留意过声明的
结构
体所占用内存空间大小,他们会感到诧异、惊讶,为何声明的是...
大小端模式和
结构
体中成员
变量
的内存分布
计算机系统中,每个地址单元对应
一个
字节(8bit),一种数据类型可能占用多个字节,如何安排这种数据类型中的每个字节,哪个字节在低地址,哪个在高地址,以及每个字节中比特序在内存中的位置,这就涉及到大小端模式...
字节存储单元及struct内存分配
“bit”(比特)被创造出来代表“
binary
digit”,1bit代表
一个
二进制数位。 在有限范围内的可计量数值几乎都可以用二进制数码串组合表示,计算机的内存由数以亿万计的比特位存储单元(晶体管)组成。由于
一个
位只能...
学习笔记之编译流程
读《程序员的自我修养》一书笔记整理。
C语言
69,373
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章