变量在栈中实际物理位置

1、存储在栈中的变量的物理位置是从大到小分配内存的,即先分配的变量物理地址比后分配变量的物理地址高。
2、变量名解析后是变量的地址。不是说程序将静态变量的变量名放入栈中,而实际将值存储在常量区。
例:

/////////////////////////////////////////////////////////////////////////////////////////////////////
#include <stdio.h>

void main()
{
int a=2;
char c=‘a‘;
static int s=4;

printf("%d %d %d\n",&a,&c,&s);
}
结果:
2034619708 2034619707 6293668
说明:
因为先申请的a变量,故先将a变量放入栈底,a变量占的地址是从2034619708到2034619712,再接着放入c变量,b变量占的地址是从2034619707到2034619708。最后将s变量放入堆中。

/////////////////////////////////////////////////////////////////////////////////////////////////////

时间: 2024-11-05 14:40:59

变量在栈中实际物理位置的相关文章

各种变量在内存中的高地址低地址

先确认一下这里"低地址高地址"的定义,这里并不是指的大端小端中的地址高低,而是内存中的地址 1.全局变量 先定义的全局变量位于低地址,后定义的位于高地址. 2.栈中变量 (栈中变量指的是由编译器自动分配释放的变量) 由于栈是往低地址生长的,所以先声明的变量位于高地址. 3.堆中变量 (堆中变量指的是由程序员分配释放的变量,例如new,malloc) 结论:由于堆是往高地址生长的,所以先声明的变量位于低地址. 原文地址:https://www.cnblogs.com/pjl1119/p/

Linux平台下变量在栈帧中的存储

局部变量的存储位置是在栈中,栈在内存中的特点是自上而下生长,也就是由高地址到低地址,当变量作为函数参数传递时为传值方式,函数形参作为接收方会开辟一块临时空间来拷贝实参的值,如下代码: 当main函数中调用函数stack_test时,将局部变量a,b传值过去,此时调试可得到a,b的存储位置 而后进入函数stack_test后,临时开辟了另一块空间来拷贝a,b的值,调试可得出 因此,形参和实参并不是同一回事,只是值相同而已,此时输出b,值应该为0xbbbb,而之后将a的地址赋给临时指针变量p,再将p

java中静态变量在内存中的位置

java程序在内存中的存储分配情况: 一.堆区: 1.存储的全部是对象,每个对象都包含一个与之对应的class的信息.(class的目的是得到操作指令) 2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身 栈区: 1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中 2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问. 3.栈分为3个部分:基本类型变量区.执行环境上下文.操作指令区(存

[转组第8天] | 变量在内存中的位置和访问方式

2018-05-05 <C++反汇编和逆向技术>第七章 变量在内存中的位置和访问方式 读书笔记 1.全局变量和局部变量的区别 全局变量属于进程作用域,也就是说,在整个进程中都能够访问到这个全局变量.静态变量属于文件作用域,在当前源码文件内可以访问到:局部变量属于函数作用域,在函数内部可以访问到:在"{}"语句块内定义的变量,属于块作用域,只能在定义变量的"{}"快内访问到. 全局变量在内存中的地支顺序是先定义的变量在低地址,后定义的变量在高地址. 全局变

实例介绍Cocos2d-x中Box2D物理引擎:HelloBox2D

我们通过一个实例介绍一下,在Cocos2d-x 3.x中使用Box2D物理引擎的开发过程,熟悉这些API的使用.这个实例运行后的场景如图所示,当场景启动后,玩家可以触摸点击屏幕,每次触摸时候,就会在触摸点生成一个新的精灵,精灵的运行自由落体运动. HelloBox2D实例 使用Box2D引擎进行开发过程,如图12-15所示.下面我们就按照这个步骤介绍一下代码部分.首先看一下看HelloWorldScene.h文件,它的代码如下: [html] view plaincopy #ifndef __H

面试经常问的C语言变量在内存中的分布(VC6.0)

C/C++变量在内存中的分布在笔试时经常考到,虽然简单,但也容易忘记,因此在这作个总结,以加深印象. 一: #include <stdio.h> #include <malloc.h> int g_i = 100; int g_j = 200; int g_k, g_h; int main() { const int MAXN = 100; int *p = (int*)malloc(MAXN * sizeof(int)); static int s_i = 5; static i

java类中各成分的加载顺序跟内存中的存放位置-----转载

1 参加一个笔试,有一个关于类的静态代码块.构造代码块.构造函数的执行顺序的问题.不太清楚,网上百度了一下.在这里记录一下. 2 3 一.什么时候会加载类? 4 使用到类中的内容时加载:有三种情况 5 1.创建对象:new StaticCode(); 6 2.使用类中的静态成员:StaticCode.num=9; StaticCode.show(); 7 3.在命令行中运行:java StaticCodeDemo 8 9 二.类所有内容加载顺序和内存中的存放位置: 10 利用语句进行分析. 11

栈中函数调用原理详解

函数调用是程序设计中的重要环节,本文就函数调用的过程进行分析. 一.eip.ebp.esp介绍 EIP,EBP,ESP都是系统的寄存器,里面存储的是些地址,我们系统中栈的实现上离不开他们三个. 我知道栈的数据结构主要特点是 后进先处.它还有两个作用: 1.栈是用来存储临时变量,函数传递的中间结果. 2.操作系统维护的,对于程序员是透明的. 下面我们就通过一个小例子说说栈的原理. 先写个小程序: 当程序进行函数调用的时候,我们经常说的是先将函数压栈,当函数调用结束后,再出栈.这一切的工作都是系统帮

Java 类中各成分加载顺序 和 内存中的存放位置

参加一个笔试,有一个关于类的静态代码块.构造代码块.构造函数的执行顺序的问题.不太清楚,网上百度了一下.在这里记录一下. 一.什么时候会加载类?使用到类中的内容时加载:有三种情况1.创建对象:new StaticCode();2.使用类中的静态成员:StaticCode.num=9;  StaticCode.show();3.在命令行中运行:java StaticCodeDemo 二.类所有内容加载顺序和内存中的存放位置:利用语句进行分析.1.Person p=new Person("zhang