首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >嵌套结构内存分配

嵌套结构内存分配
EN

Stack Overflow用户
提问于 2017-07-17 21:38:05
回答 1查看 507关注 0票数 1

我看到了关于这个主题的几个问题,.But,我的查询不能是resolved.Links:

Structure memory allocationAllocating memory for nested structure pointerUnderstanding Nested Structures

基本上,内存是在创建结构实例时分配的,而不是在定义结构实例时分配的。那么,如果我在这个结构中创建了另一个结构的对象,比如这样的东西:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct a{
int c;
};

struct b
{
struct a obj;
};

现在,当我们在struct a对象中声明它时,内存是否被分配给它呢?(我们也可以通过指针来实现它,但是如果我们这样做呢)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-17 21:39:45

在您的示例中,struct b也是(另一个)声明,与struct a一样。

这里没有内存分配。编译器需要知道,如果定义了这种类型的变量,需要分配多少内存。仅仅因为一个结构的一个成员是另一个结构,并不意味着必须在那里分配内存。一旦您有了该类型的变量,就会进行内存分配。

这里唯一要注意的是,内部结构类型必须在作为外部类型的成员之前声明。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45158364

复制
相关文章
【C 语言】结构体 ( 结构体中嵌套一级指针 | 分配内存时先 为结构体分配内存 然后再为指针分配内存 | 释放内存时先释放 指针成员内存 然后再释放结构头内存 )
声明 结构体类型 : 这里注意 , 在结构体中 , 定义一个 一级指针 变量 , 注意与 数组类型区别 ;
韩曙亮
2023/03/30
2.5K0
【C 语言】结构体 ( 结构体中嵌套一级指针 | 分配内存时先 为结构体分配内存 然后再为指针分配内存 | 释放内存时先释放 指针成员内存 然后再释放结构头内存 )
Redis数据结构和内存分配
OBJ_ENCODING_INT:表示成数字。最多标识long的最大值,超过转为OBJ_ENCODING_RAW。 OBJ_ENCODING_RAW: string原生表示方式。 OBJ_ENCODING_EMBSTR: 功能同RAW,只是数据是存储在一块连续的内存中,embstr创建和释放字符串操作内存的次数比RAW的2次降低为1次,修改将重新分配内存。 OBJ_ENCODING_HT: 类似hashtable,表示成dict。 OBJ_ENCODING_ZIPMAP: 是个旧的表示方式,已不再用。 OBJ_ENCODING_LINKEDLIST:双向列表,3.2以下版本使用 OBJ_ENCODING_ZIPLIST: 表示成ziplist。 OBJ_ENCODING_INTSET:表示成整数数组。用于set数据类型。 OBJ_ENCODING_SKIPLIST:表示成skiplist跳跃表。用于zset数据结构。 OBJ_ENCODING_QUICKLIST:表示成quicklist。用于list数据类型。
MickyInvQ
2020/10/26
1.1K0
Redis数据结构和内存分配
[C语言] 数据结构-预备知识动态内存分配
int *parr=(int *)malloc(sizeof(int) * len);
唯一Chat
2019/09/10
3490
【C 语言】结构体 ( 结构体中嵌套二级指针 | 为 结构体内的二级指针成员 分配内存 | 释放 结构体内的二级指针成员 内存 )
结构体中 嵌套 二级指针 , 二级指针 可以使用 指针数组 / 二维数组 / 自定义二级指针内存 三种内存模型的任意一种 ;
韩曙亮
2023/03/30
1.8K0
【C 语言】结构体 ( 结构体中嵌套二级指针 | 为 结构体内的二级指针成员 分配内存 | 释放 结构体内的二级指针成员 内存 )
Zephyr 内存分配
int k_mem_pool_alloc(struct k_mem_pool *p, struct k_mem_block *block, size_t size, s32_t timeout)
无限之生
2020/07/01
1.7K0
Netty内存分配
Netty 中的内存管理的实现并不是一蹴而就的,它也是参考了 Jemalloc 内存分配器。而 Jemalloc 又借鉴了 Tcmalloc(出身于 Google,通过红黑树来管理内存快和分页,带有线程缓存。对于小的对象来说,直接由线程的局部缓存来完成,大对象那就由自旋锁来减少多线程下的竞争)的设计思路,但是 Jemalloc 设计的更复杂,虽然也有线程缓存的特性,但是 Jemalloc 将内存分配的粒度划分为 Small、Large、Huge 三个分类,在空间的占用上比较多,但是在大内存分配的场景,内存碎片就略少 。
政采云前端团队
2023/09/14
5340
Netty内存分配
java内存分配
转自:http://www.iteye.com/topic/634530 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(对象可能在常量池里)(字符串常量对象存放在常量池中。) 3. 堆:存放所有new出来的对象。 4. 静态域:存放静态成员(static定义的) 5. 常量池:存放字符串常量和基本类型常量(public static final)。有时,在嵌入式系统中,常量本身会和其他部分分割离开(由于版权等其他原因),所以在这种情况下,可以选择将其放在ROM中 。 6. 非RAM存储:硬盘等永久存储空间 这里我们主要关心栈,堆和常量池,对于栈和常量池中的对象可以共享,对于堆中的对象不可以共享。栈中的数据大小和生命周期是可以确定的,当没有引用指向数据时,这个数据就会消失。堆中的对象的由垃圾回收器负责回收,因此大小和生命周期不需要确定,具有很大的灵活性。 对于字符串:其对象的引用都是存储在栈中的,如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中,如果是运行期(new出来的)才能确定的就存储在堆中。对于equals相等的字符串,在常量池中永远只有一份,在堆中有多份。 如以下代码:
qubianzhong
2019/06/26
2.1K0
java内存分配
连续内存分配
连续内存是一种比较直观的做法。这种做法将内存分为两个区域,一个是用户进程区域,另一个是操作系统区域。操作系统一般放在内存的低地址区域,这时因为中断向量被设置在低地址,例如0x80中断。为了提高响应速度,内存之中需要驻留多个进程来实现这一性能改进。现在就需要考虑内存分配。
zy010101
2019/07/10
1.8K0
C语言动态内存分配:按需分配内存。
1.void *malloc(int size); 2.void free(void *p); 例:建立动态数组,输入5个学生的成绩,输出不及格学生的成绩。 #include<stdlib.h> int main(){ void check(float *p); float *p=(float*)malloc(5*sizeof(float)); for(int i=0;i<=4;i++){ scanf("%f",p+i); } check(p); free(p); return 0; } void chec
岳泽以
2022/10/26
1.5K0
【Linux 内核 内存管理】引导内存分配器 bootmem ① ( 引导内存分配器 bootmem 工作机制 | 引导内存分配器 bootmem 的描述 bootmem_data 结构体 )
Linux 内核 初始化 时 , 需要进行内存分配 , 启动阶段的 内存分配 与 运行时的 内存分配 机制不同 ;
韩曙亮
2023/03/30
6190
【Linux 内核 内存管理】引导内存分配器 bootmem ① ( 引导内存分配器 bootmem 工作机制 | 引导内存分配器 bootmem 的描述 bootmem_data 结构体 )
Go 内存管理 -- 内存分配 二
首先会申请一段连续的内存空间以供使用,大小(64位机器上)512M(spans_mapped)+16G(bitmap_mapped)+512G(arena)。 hmap初始化的源码在src/runtime/proc.go中,大家可以参照本文看一下。 mheap初始化
邹志全
2019/07/31
1.7K0
Java内存管理(一、内存分配)
关于Java内存分配,很多问题都模模糊糊,不能全面贯通理解。今查阅资料,欲求深入挖掘,彻底理清java内存分配脉络,只因水平有限,没达到预期效果,仅以此文对所研究到之处作以记录,为以后学习提供参考,避免重头再来。
bear_fish
2018/09/20
3.5K0
数组大小分配(动态内存分配)
在很多情况下,我们无法确定要使用多大的数组。一般申请大于估计数目的固定大小,这样程序在运行时就申请了固定的大小,你觉得数组定义足够大,但是如果某种原因,数组的个数增大或减小,你又必须重新修改程序,扩大数组的存储范围。这种分配固定大小内存分配的方法称为静态内存分配。但是这种分配方法存在比较严重的缺陷,特别是处理某些问题时,在大多数情况下会浪费大量的内存空间;在少数情况下,当申请的数组不够大时,可能引起下标越界错误,甚至导致严重的后果。 为了解决这个问题,提出了动态内存分配。所谓动态内存分配是指在程序执行的过程中动态地分配或者回收存储空间的内存分配方法。动态分配不像数组等静态内存分配方法需要预先申请内存空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。从以上动、静态内存分配比较可以知道动态内存分配相对于静态内存分配的特点:
海盗船长
2020/08/27
2.6K0
Go 内存管理 -- 内存分配 一
go作为一个比较新晚(新)的语言,自然借鉴前辈们的优点,比如说语言本身负责内存管理、对协程和高并发的高优支持、简单高效的语法等。本篇及后续的几篇要讲的就是还没提到的比较复杂的内存管理。 学习内存管理(分配&回收)前,如果有JVM的内存管理的基础,会变得非常简单,如果是第一次接触内存管理,在看完Go的内存管理后可以去看看JVM的,对比着学习比较容易理解。 go的内存管理思路是基于google 的tcmalloc(thread-caching-malloc)实现的,常见的内存分配器还有ptmalloc、jemalloc,但是tcmalloc的性能更高,尤其是高并发场景下。
邹志全
2019/07/31
1.4K0
Memcache内存分配策略
转自:http://tank.blogs.tkiicpp.com/2010/12/14/memcache%e5%86%85%e5%ad%98%e5%88%86%e9%85%8d%e7%ad%96%e7%95%a5/
Java架构师必看
2021/03/22
1.4K0
探寻iOS内存分配
iOS中主要是栈区(stack)、堆区(heap)、全局区/静态区(staic) ;
sweet说好的幸福
2020/12/23
1.3K0
探寻iOS内存分配
【Linux 内核 内存管理】伙伴分配器 ② ( 伙伴分配器分配内存流程 )
页 / 阶 概念参考 【Linux 内核 内存管理】伙伴分配器 ① ( 伙伴分配器引入 | 页块、阶 | 伙伴 ) 博客 ;
韩曙亮
2023/03/30
7.1K0
【Linux 内核 内存管理】memblock 分配器 ① ( memblock 分配器简介 | memblock 结构体成员分析 | 物理内存类型 与 内存类型 )
ARM64 架构体系中 , 不能使用 bootmem 引导内存分配器 , 使用的是 memblock 分配器 ;
韩曙亮
2023/03/30
8990
【Linux 内核 内存管理】memblock 分配器 ① ( memblock 分配器简介 | memblock 结构体成员分析 | 物理内存类型 与 内存类型 )
Netty Unpooled 内存分配
Netty里的内存管理是通过ByteBuf这个类作为桥梁连接着业务代码与jdk底层的内存。所以理解ByteBuf的结构就很有必要了。
良辰美景TT
2018/12/25
1.8K0
图解golang内存分配
我们知道所有程序运行都需要使用内存,而内存的管理和分配又是非常重要的,它决定了你的程序能不能在有限的资源内跑的更快。可以设想一下,如果你自己来设计的一个内存分配的规则,会遇到什么问题呢?如果你有了一大块内存你要怎么去合理的分配和使用呢?今天我们通过几张图来看看golang中的内存分配是怎样的。
LinkinStar
2022/09/01
1.1K0
图解golang内存分配

相似问题

分配内存的嵌套结构

40

为嵌套结构分配内存

10

为嵌套结构指针分配内存

56

释放嵌套结构的分配内存

24

嵌套结构和动态内存分配

17
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文