c++内存分配 a ,b,c,和obj是如何分配空间的

a ,b,c,和obj是如何分配空间的 obj是一个class A的对象

图片说明
图片说明

c++
0

3个回答

都放在堆栈上,堆栈从高地址向低地址扩展,所以先定义的地址大于后定义的。
整数使用4个字节
A用了几个字节需要看A的定义

0
caozhy
操作员马善福(贵阳专业挖机) 回复夜雨**: 堆栈上内存不需要所谓分配。
3 个月之前 回复
qq_42193250
夜雨** 你的意思是不是一进入main方法,a,b,c就分配了空间,执行到main中的那个代码块,obj才分配内存,所以obj是最后分配的内存,所以地址是最小的
3 个月之前 回复

并不是想你评论中说的那样,程序是从上往下一行一行走的(你暂时先这么理解),执行到obj,等其他变量时程序会给他分配内存
你程序中的变量都是在栈中分配的。栈中分配的内存系统会自己释放他

0

栈是由高地址向低地址增长的。
1) 所以 a > obj; a > b > c
2) 自动变量作用域是最内层的{} 所以 执行到输出b/c 时, obj生命期已过; 看起来b/c 与 obj 可能地址有重叠部分
3) 具体的obj 与 b/c 之间的位置关系, 还需要看A的sizeof 多大、 设置的对齐方式

进入函数时, 栈都会计算所需空间自动提前扩充好。

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Java基础(三)java内存分配
Java中的内存分配* A:栈(掌握)    * 存储局部变量        局部变量:定义在方法声明上和方法中的变量* B:堆(掌握)    * 存储new出来的数组或对象 * C:方法区    * 代码 * D:本地方法区    * 和系统相关 * E:寄存器    * 给CPU使用1.一维数组的内存(1)一个数组的内存图解首先是方法进栈,main方法圧进栈,随后变量进栈,new的对象进入堆,...
【记录】C语言int a 也会分配内存
int a;和int a[x]这两个语句都会分配内存还是第二个会分配? 哪里能找到介绍程序设计语言在物理层的操作的书?比如我问的问题,好象程序设计的书上都不会讲到,还有就是 int a=4; int b; b=a; 这里的b=a的b,系统是怎么找到b的存储位置的? 回答: 第一个问题: void fun() { int a; int b[x]; } 当进入函数fun的时候,程序会
C/C++中内存分配与STL中的空间配置
C/C++中内存分配与STL中的空间配置 C语言中的内存分配 C++中的内存分配 new/delete new/delete的多种使用 memory头文件中 空间配置器 一级空间配置器 二级空间配置器 SimpleAllocate 最近在看侯捷的《STL源码解析》,按照里面的思路写了一个迷你的STL,由于STL中的内存分配和空间配置较为复杂,在这里总结一下。 ...
全局变量,静态变量,程序的内存分配,char a[]和char *a的区别,char*a[]和char**a
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl
嵌入式C语言之struct内存分配分析
以下内容均来源于网络资源的学习和整理,如有侵权,请告知删除! 本文摘自微信号《嵌入式ARM》。 对结构MyStruct采用sizeof会出现什么结果呢?sizeof(MyStruct)为多少呢?   也许你会这样求:sizeof(MyStruct)=sizeof(double)+sizeof(char)+sizeof(int)=13  但是当在VC中测试上面结构的大小时,你会
C语言内存分配详解
在任何程序设计环境及语言中,内存管理都十分重要。在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的。因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题。第1节主要介绍内存管理基本概念,重点介绍C程序中内存的分配,以及C语言编译后的可执行程序的存储结构和运行结构,同时还介绍了堆空间和栈空间的用途及区别。第2节主要介绍C语言中内存分配及释放函数、函数的功能,以及如何调用这些函数申请/释放内存
深入理解C语言结构体成员变量内存分配
欢迎点击「算法与编程之美」↑关注我们!本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列博客。1 问题描述在学习C语言的时候,我们都会频繁的接触到结构体,使用结构体定义新的数据类型,从而更加方便的存储数据。但是在使用结构体的时候,有些问题会经常会困扰我们,如下所示:第一种结构体定义:struct school{    char address[100];    char nam...
struct与union内存分配问题
今天在调试代码时,关于struct与union内存分配问题产生了疑惑,故上网查询了相关资料,记于此,以便日后查看。 struct与union在内存分配的时候,主要区别如下: 前者按照结构体内定义的数据顺序来进行分配内存的,分配的基本单位(即:每分配一次的量)是struct里面所定义的最长数据类型的长度; 后者联合体内的数据共用一块内存,是以union里面所定义的最大类型长度的整数倍来
C语言中内存分配
在任何程序设计环境及语言中,内存管理都十分重要。在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的。因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题。 第1节主要介绍内存管理基本概念,重点介绍C程序中内存的分配,以及C语言编译后的可执行程序的存储结构和运行结构,同时还介绍了堆空间和栈空间的用途及区别。 第2节主要介绍C语言中内存分配及释放函数、函数的功能,以及如何调用这些函数申请
C中关于malloc 内存地址是如何分配的?
https://www.jianshu.com/p/2ebd415b947d 思考: 在C语言中我们向操作系统请求malloc内存空间地址是连续的吗??? 测试 1 每次申请一块内存空间 void *a1 = malloc(1); void *a2 = malloc(2); printf("%p\n",a ); printf("%p\n", a1); printf("%p\n", a2)...
C语言内存分配-通俗理解
最近很多同学希望了解C语言的内存分配,虽然可以在互联网上找到诸多的讲解,但是你会发现要么不通俗易懂,要么不算太全面。而这些对于新手而言,又绝对会把你弄得晕头转向的,所以在此对网上和书本上的诸般讲解,进行了通俗的翻译和总结。
C/C++程序编译时和运行时内存区域分配
c程序内存分配区域问题。记得以前学《Unix高级环境编程》时书中有提到c程序内存分配问题。然后有次面试时,问到这个问题我根据书上的内容来回答的,面试官却说回答的对了一半,当时很纳闷怎么会对了一半呢。下面来解释下。         先来说下c程序编译内存分配:         1.栈区(stack):存放局部变量和参数,申请和释放都由编译器自动完成。         2.堆区(he
C语言——操作系统内存分配过程
内存分配机制的发展过程: 第一阶段——程序直接操作物理内存。 某台计算机总的内存大小是128M,现在同时运行两个程序A和B,A需占用内存10M,B需占用内存100。计算机在给程序分配内存时会采取这样的方法:先将内存中的前10M分配给程序A,接着再从内存中剩余的118M中划分出100M分配给程序B 1.进程地址空间不隔离。 进程之间可以互相修改内存,导致不安全,可能会出现一个进...
C语言内存分配及堆栈问题总结
1. C语言程序编译的内存分配,堆与栈的区别  C语言程序编译的内存分配: 1.栈区(stack) --编译器自动分配释放,主要存放函数的参数值,局部变量值等; 2.堆区(heap)  --由程序员分配释放; 3.全局区或静态区 --存放全局变量和静态变量;程序结束时由系统释放,分为全局初始化区和全局未初始化区; 4.字符常量区    --常量字符串放与此,程序
union中的内存分配
在union联合体中,所有的变量是公用一个内存的,即以最大内存变量作为整个union的内存空间进行申请。同时也服从内存对其的策略,即如果同时又一个char和一个int类型,则占据4个字节的内存空间,最低字节就是char所对应的值,而如果单纯的只给char变量赋值,则int型变量的高三个字节是未定义的。 #include using namespace std; union CC { int
C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?
C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?
C学习笔记——malloc内存分配
鉴于上次领导告诉一个解决方案,让我把它写成文档,结果自己脑子里知道如何操作和解决,但就是不知道如何用语言文字把它给描述出来。决定以后多写一些笔记和微博来锻炼自己的文字功底和培养逻辑思维,不然只会是一个敲代码的,永远到不了管理的层面。          把《C程序设计语言》细读了一遍后,到第8章UNIX系统接口的最后两节——“目录列表”和“存储分配程序”,看了一遍都没看懂。智商不过高啊。把存储分配
内存分配函数(C语言)
C 标准函数库提供了许多函数来实现对堆上内存管理 malloc函数:malloc函数可以从堆上获得指定字节的内存空间(必须初始化) free函数:释放内存,防止内存泄露 calloc函数:与 malloc类似,但不需要初始化 realloc函数:重新分配内存头文件stdlib.hmallocmalloc函数可以从堆上获得指定字节的内存空间,其函数原型如下:void * malloc(int
c语言堆与栈及内存分配
原文:http://www.cnblogs.com/TonyEwsn/archive/2010/01/29/1659496.html
c 程序内存分配管理
首先澄清几个概念, 给变量分配内存空间可分为静态内存分配和动态内存分配。 静态内存分配属于编译时给变量分配的空间,动态分配属于在程序运行时给变量分配的空间 静态分配属于栈分配,动态分配属于堆分配 运行效率上,静态内存比动态内存要快 int a[10] 属于静态分配 int a[n] 或 int *a; a = (int*)malloc(sizeof(int)*n) 属于动态分配 一般...
内存分配失败错误处理
一、C语言中的malloc/calloc/realloc/valloc/alloca/memalign函数: 这样的内存分配函数在内存分配失败时都返回空指针,因此,在调用返回时,检查返回值的方法比较简单,只需要与空指针比较即可; 如: char* p = (char*)malloc(1204); if(p == NULL) {  //error handle; }; char*
c/c++指针详解(二)----内存分配
1、内存分配的三种方式: 1)、从静态存储区分配。数据的内存在程序编译时已经被分配,该内存在整个运行期间长期驻留,不会被释放;程序结束时,由操作系统自动释放。这类数据包括静态数据和全局数据。 2)、从栈空间分配。函数执行过程中,函数中的局部变量的内存,在栈上被分配;当函数调用完成后,随函数的返回空间也被释放。 3)、从堆空间分配。由开发者动态的申请内存,并手动的释放内存。 本文具体介绍动态
关于C语言中内存分配问题(malloc函数)
malloc函数的原型: (void *)malloc(int size)  malloc函数的返回值是一个void类型的指针,参数为int类型的数据,即申请分配的内存大小,单位是字节。内存分配成功之后,malloc函数返回这块内存的首地址,你需要一个指针来接受这个地址。但是由于函数的返回值是void *类型,所以必须强制转换成你所接收的类型。也就是说这块内存将来要用来存储什么类型的数据,比如...
c语言—指针基础(7:静态分配内存)
C语言静态分配内存
C语言好难——结构体的内存分配
结构体的内存分配,我个人是觉得比较蛋疼的,它有一个需要遵循的原则,地址对齐,也有人称为内存对齐,叫法没关系,反正我只是“拿来”,会用就行。        好了,先有这么一个概念,什么是内存对齐,先丢一边。……~(~o ̄▽ ̄)~o 。。。滚来滚去……o~(_△_o~) ~。。               设char占用1个字节,int占用4个字节。        那么问题1
c/c++中内存分配
在任何程序设计环境及语言中,内存管理都十分重要。在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的。因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题。 第1节主要介绍内存管理基本概念,重点介绍C程序中内存的分配,以及C语言编译后的可执行程序的存储结构和运行结构,同时还介绍了堆空间和栈空间的用途及区别。 第2节主要介绍C语言中内存分配及释放函数、函数的功能,以及如何调用这些
C语言-编译过程与内存分配
一、编译过程 1、             预编译(预处理) 预处理过程实质上是处理“#”,将#include包含的头文件直接拷贝到hell.c当中;将#define定义的宏进行替换,同时将代码中没用的注释部分删除等 具体做的事儿如下: (1)将所有的#define删除,并且展开所有的宏定义。说白了就是字符替换 (2)处理所有的条件编译指令,#ifdef #ifndef #e
C语言内存的动态存储管理3-分配算法和回收
<br />对于内存块大小不同的空闲链表,假如有一个大小为N的内存申请,如果空闲链表中大于N的内存只有一块,假如大小为M,就把M的一部分分配给用户,同时把剩余的M-N的部分作为一个节点插入到空闲链表中。<br />当大于N的内存有多块时,我们该如何分配呢?通常有以下三种方法:<br />(1)最先适配法。顾名思义,顺序扫描空闲链表,找到第一个大于等于N的空闲块,把其中的N分配给用户。因为链表不按内存的地址有序,也不按大小有序,所以回收内存块放到表头即可。<br />问题:运行一段时间后,链表中将会出现一些非
形参和实参,以及在内存中的分配
C#中有两种类型的数据,一种为值类型;另一种为引用类型。 值类型:int、char、float、long、bool、double、struct、enum、short、byte、decimal、sbyte、uint、ulong、ushort等 引用类型:string、class、interface、delegate、object等 他们最大的区别就是存储的位置不同,前者值类型存储在内存的栈
浅谈C,C++语言的基本数据类型的内存分配和指针的内存分配
C语言的基本类型变量的内存分配和指针内存分配方式的对比(int类型) 本文是学了数据结构之后,对 “int * & a ; ”这种类型变量的深入了解,同时也温习了很久之前学过的C语言知识。如果有不得当的地方,希望大家留言。
C/C++分配内存空间
【方法】C:malloc、calloc、realloc、free;            C++:new、delete   【函数原型】:请求成功返回空间首地址,失败返回NULL #include void *malloc( size_t size ); //分配size字节的连续内存,不负责初始化,使用memset初始化。 void *calloc( size_t num, si
C语言为结构体变量分配的内存大小
首先要区分两个概念:结构体类型和结构体变量 struct student { int iNum; //学号 char cName[20]; //名字 char cSex; //性别 int iAge; //年龄 float fScore; //分数 char cAdd[30]; //家庭住址 } 这里的struct student是结构体类型,其中student是结构体名(...
队列---C语言实现---三种内存分配方式
转自:http://myswirl.blog.163.com/blog/static/51318642201183025254801/ 队列是一种先进先出的结构。 排队就是一种典型的队列。首先轮到的是排在队伍前面的人,新入队的人总是排在队伍的最后。 队列的实现比堆栈要难得多。它需要两个指针,一个指向队头,一个指向队尾。 同时 ,数组并不像适合堆栈那样适合队列的实现,这是由于队列使用内存的方
链表的C语言实现 含动态内存分配
链表的C语言实现 含动态内存分配
c语言在内存中的分布
参考文章https://www.cnblogs.com/yif1991/p/5049638.html 存储时结构 首先写一个c语言版的Hello World #include &amp;amp;lt;stdio.h&amp;amp;gt; void main() { printf(&amp;quot;hello,world\n&amp;quot;); } 将该段程序写在一个hello.c的文件中。打开终端,编译hello.c生成一个a.ou...
C的编译器对内存空间的分配
一、预备知识—程序的内存分配  一个由c/C++编译的程序占用的内存分为以下几个部分  1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。  2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。  3、全局
C语言结构体成员内存分配
C语言中结构体内存分配曾经把我迷惑了好一阵子,确切说可以说是结构体对象所占用的空间判断让我迷惑了一阵子。把我之前探索的过程记录下来,做一下简单的学习总结。在此之前,我已经了解到了一点基本的信息,也就是:存储的分配一般是需要照顾到同类元素的连续,而不是做一个简单的数位累计。        简单写一段代码,定义结构体同时输出一些可以用于判断的信息如下: #include"stdio.h"  
【C语言】内存区域划分及分配及变量知识总结(全局变量、局部变量)
一、内存区域划分与分配: 1、栈区(stack)——程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等,程序结束时由编译器自动释放。 2、堆区(heap) —— 在内存开辟另一块存储区域。一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。用malloc, calloc, realloc等分配内存的函数分配得到的就是在堆上。 3、全局区(静态区)(static)——...
【20180823】【C/C++基础知识】指针与结构,二重指针,指针数组和字符指针数组,动态内存空间的分配和释放
结构与指针 定义: /* 定义 */ struct info     // 定义了一个info结构,里面有两个成员num和name[5] { short num;    // 两个成员的类型分别为short型和char型 char name[5]; } struct info myinfo1,myinfo2,*p_info1,*p_info2;  // 定义两个结...
C语言进程的内存地址空间分配
图为一个执行进程的内存地址空间。 代码段就是存储程序文本的,所以有时候也叫做文本段,指令指针中的指令就是从这里取得。数据段是存储数据用的,还可以分成初始化为非零的数据区,BSS,和堆(Heap)三个区域。初始化非零数据区域一般存放静态非零数据和全局的非零数据。BSS是Block Started by Symbol的缩写,原本是汇编语言中的术语。该区域主要存放未初始化的全局数据和静态数据。还有就是
文章热词 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java如何学习c 深度学习是学c还是python