struct 内存分配

skyx 2008-12-10 01:19:03
struct S1 {
...
char a[1000];
char b[1000];
...
} s1;

memset((struct *)&s1, 0, sizeof(s1))会不会存在风险,在不同的操作系统和编译器上?

struct的地址空间是否是连续的?
...全文
90 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
majun01 2008-12-10
  • 打赏
  • 举报
回复
没风险,大胆用。
rlxtime 2008-12-10
  • 打赏
  • 举报
回复
没有问题的!
不过:memset((struct *)&s1, 0, sizeof(s1)) 这里面(struct *)什么意思? 是不是少了一个S1
fhinalibob 2008-12-10
  • 打赏
  • 举报
回复
可以的,struct空间是连续的!
wdchxzh 2008-12-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lbh2001 的回复:]
memset是C的标准库中的函数,是所有平台编译器必须实现的
struct成员的地址空间是否是连续的,当然要考虑中间可能有对齐引起的间隙填充
[/Quote]
当然要考虑中间可能有对齐引起的间隙填充
struct S1 {
...
char a[1000];
char b[1000];
...
} s1;
由于你的结构中成员类型不全,所以不好判断是不是有需要填充的空隙,当然如果你都是char类型的那么地址是连续的了
feeboby 2008-12-10
  • 打赏
  • 举报
回复
中间有空隙没有关系
sizeof 会保证整个struct 被填成0
xtting_8984313 2008-12-10
  • 打赏
  • 举报
回复
连续的
lbh2001 2008-12-10
  • 打赏
  • 举报
回复
memset是C的标准库中的函数,是所有平台编译器必须实现的
struct成员的地址空间是否是连续的,当然要考虑中间可能有对齐引起的间隙填充
yellowhwb 2008-12-10
  • 打赏
  • 举报
回复
直接memset就可以了,没问题,struct空间是连续的!

70,020

社区成员

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

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