struct 内存分配

skyx 2008-12-10 12:17:10
struct 内存分配问题
例如:
struct S1 {
...
char a[1000000000000000000];
...
};

memset( S1,0, sizeof(S1))
会不会有问题

在内存不够的时候a还是会存储在S1的地址空间,还是会当做指针,指向另外一个可用空间,
是不是和编译器和操作系统有关系?
...全文
146 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lbh2001 2008-12-10
  • 打赏
  • 举报
回复
如果编译器和系统允许这么大的数组,是没有问题的
这种用法是个技巧,将数组用结构封装,借用结构的赋值特性完成数组的赋值
而普通的数组是不能这样的
tdjdyq 2008-12-10
  • 打赏
  • 举报
回复
你可以设置这个数组大小,在编译中.

在内存不够的时候a还是会存储在S1的地址空间,还是会当做指针,指向另外一个可用空间,
不是这样的
tdjdyq 2008-12-10
  • 打赏
  • 举报
回复
编译器一般是回默然一个数组的大小,超过了程序不能运行
yellowhwb 2008-12-10
  • 打赏
  • 举报
回复
1000000000000000000的话当然不行,32位机的整型才2^32大小,超出数组下标,呵呵,只要空间够,就不会有问题
skyx 2008-12-10
  • 打赏
  • 举报
回复
可能举例有些极端
换成1000好了
struct S1 {
...
char a[1000];
char b[1000];
...
} s1;

memset((struct *)&s1, 0, sizeof(s1))会不会存在风险,在不同的操作系统和编译器上?
jackzhhuang 2008-12-10
  • 打赏
  • 举报
回复
你在vs下申请char a[1024 * 1024 * 1024]就无法通过编译,编译器事先检查了。
Claude 2008-12-10
  • 打赏
  • 举报
回复
数组大小的限制应该和进程地址空间4G相关,本身并无限制。
jackzhhuang 2008-12-10
  • 打赏
  • 举报
回复
数组不是你说多大就能有多大的,与编译器有关

69,373

社区成员

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

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