社区
C语言
帖子详情
struct 内存分配
skyx
2008-12-10 12:17:10
struct 内存分配问题
例如:
struct S1 {
...
char a[1000000000000000000];
...
};
memset( S1,0, sizeof(S1))
会不会有问题
在内存不够的时候a还是会存储在S1的地址空间,还是会当做指针,指向另外一个可用空间,
是不是和编译器和操作系统有关系?
...全文
153
8
打赏
收藏
struct 内存分配
struct 内存分配问题 例如: struct S1 { ... char a[1000000000000000000]; ... }; memset( S1,0, sizeof(S1)) 会不会有问题 在内存不够的时候a还是会存储在S1的地址空间,还是会当做指针,指向另外一个可用空间, 是不是和编译器和操作系统有关系?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
打赏
举报
回复
数组不是你说多大就能有多大的,与编译器有关
字节存储单元及
struct
内存分配
当今的计算机系统使用的基本上都是由18世纪德国数理哲学大师莱布尼兹发现的二进制系统。二进制数字系统中只有两种二进制数码——0和1。“bit”(比特)被创造出来代表“binary digit”,1bit代表一个二进制数位。 在有限范围内的可计量数值几乎都可以用二进制数码串组合表示,计算机的内存由数以亿万计的比特位存储单元(晶体管)组成。由于一个位只能表示二元数值,所以单独一位的用处不大。通常将许多位组成一组作为一个基本存储单位,这样就可以存储范围较大的值。
C++
struct
内存分配
大小
C++
struct
内存分配
大小 一 原则: 1 所有字段在内存中出现顺序与声明顺序一致 (理论上,译器可以随便放置各个字段) 2 由于性能原因,大多数编译器实际上会将
struct
的各个字段对齐放置在合适的内存边界。具体细节随着语言编译器和CPU的不同而不同。在80X86体系中,符合Intel应用二进制接口(ABI Application Bianry Interface)的编译器会将
【C语言】
struct
结构体内存如何分配
1.结构体
内存分配
是根据结构体成员的类型大小分配的,且结构体分配内存是实例化之后分配的。 对于以上的结构体,
struct
demo的大小是多少呢?有些同学会觉得是13个字节,其实并不是,这里的
struct
demo 的大小是24个字节。 我们可以用 sizeof()来测试下结果: 输出结果为: 那么从以上测试代码可以总结出: 1.结构体大小计算时,是以结构体成员的类型大小最大的那个为单位分配的。 2.结构体分配内存是结构体实例化之后才分配的,在栈内或堆内分配。
【Linux Kernel-task_
struct
专题】task_
struct
内存分配
它通过缓存这些对象的内存,可以快速地分配和释放这些对象,减少内存碎片,并提高分配效率。这两个宏提供了一种机制,允许在
内存分配
前后执行额外的逻辑,如保存和恢复分配上下文,这对于调试和跟踪
内存分配
问题非常有用。通过使用这些宏,内核开发者可以在不修改分配函数本身的情况下,添加额外的逻辑来处理特定的需求。是内核对象缓存(Slab 分配器)的一个结构体,用于管理内核对象的
内存分配
和释放。在多核系统中,内存是分区的,每个区(通常是一个NUMA节点)都有自己的内存。,这样可以减少跨节点的内存访问,提高性能。
C语言-
struct
结构体变量的
内存分配
struct
内存分配
定义技巧 首先我们定义
struct
变量,笔者习惯定义时,直接输入:
struct
name { }; 再对
struct
内部成员进行定义,防止“;”遗漏,导致程序报错。 先看一段代码 #include<stdio.h>
struct
A { char a; short b; int c; };
struct
B { int c; short a; cha...
C语言
70,022
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章