记得局部变量在栈中的地址是连续分配,今天在VS2010上发现局部变量在栈中的地址不是连续分配,查了一些资料,有的说是编译器的分配地址的算法不同而至。具体如下:
#include <iostream>
using namespace std;
int main()
{
int iv;
cout << "&iv " << &iv << endl;
cout << "iv " << iv << endl;
int iv2 = 1024;
cout << "&iv2 " << &iv2 << endl;
int iv3 = 999;
cout << "&iv3 " << &iv3 << endl;
int iv4 = 100,iv5 = 200,iv6 = 300;;
cout << "&iv4 " << &iv4 << endl;
cout << "&iv5 " << &iv5 << endl;
cout << "&iv6 " << &iv6 << endl;
int &reiv = iv2;
cout << "&reiv= " << reiv <<endl;
int &reiv2 = iv;
cout << "&reiv2= " << reiv2 <<endl;
int &reiv3 = iv;
cout << "&reiv3= " << reiv3 <<endl;
int *pi;
cout << "&pi= " << pi <<endl;
*pi = 5;
cout << "*pi" << *pi << endl;
pi = &iv3;
const double di = 2.0;
cout << "&di= " << &di <<endl;
const double maxWage = 10.0;
const double *pc = &maxWage;
cout << "pc= " << pc <<endl;
cout << "*pc= " << *pc <<endl;
return 0;
}
输出:&iv 003DFBCC
&iv1 003DFBC0
&iv2 003DFBB4
&iv3 003DFBA8
&iv4 003DFB9C
他们之间的地址相差12bytes 其中4bytes用于存储数据,8bytes用于存储其它
分享到:
相关推荐
4. **栈区**:主要用来存储函数调用时的局部变量、函数参数及返回地址等。 #### 二、全局变量详解 **全局变量**是指在函数外部定义的变量,它在整个程序的生命周期内都是可见的,并且在整个程序中都可以被访问和...
- 当函数返回值为指针类型时,使用`static`局部变量的地址作为返回值是一种常见做法。 总之,`static`关键字在C/C++中扮演着多重角色,不仅影响变量的存储方式和生命周期,还决定了变量的作用域和可见性。正确理解...
- 当函数返回值为指针类型时,通常使用静态局部变量的地址作为返回值。 #### 五、面向对象编程中的Static关键字 - **静态数据成员**: - 存储在全局数据区。 - 类的所有对象共享一份拷贝。 - 定义时需要显式...
### C语言中全局变量和局部变量的探讨 #### 引言 C语言作为一种高效、灵活的编程语言,在软件开发领域有着广泛的应用。然而,对于初学者来说,掌握C语言的一些核心概念仍然存在一定的难度,尤其是在处理函数的递归...
- 局部变量:内存由系统在函数或过程调用时分配,在执行完成后释放。 **生命周期:** - 静态变量:生命周期跨越多次函数或过程调用,保留上一次的值。 - 局部变量:生命周期仅限于单次函数或过程调用,结束后被销毁...
### 局部变量与全局变量及其在堆栈中的管理 #### 一、基本概念 **局部变量(Local Variables)**:在函数或代码块内部声明的变量称为局部变量。这些变量的作用域仅限于它们被声明的函数或代码块,一旦函数执行完毕或...
从分配内存空间看,全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量在栈里分配空间。从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量...
但是,当优化级别被设置为Medium或High时,编译器为了提升性能可能会将局部变量分配到寄存器中,或者对变量的存储方式进行其他优化。这样做的结果就是,这些变量在内存中的表示可能会被改变或完全不被使用,从而导致...
局部变量、全局变量和存储分类。 在 C 语言中,变量是程序中最基本的存储单元。变量可以分为局部变量和全局变量两种。局部变量是指在函数内部定义的变量,仅在该函数内部有效。全局变量是指在函数外部定义的变量,...
3. **静态局部变量**:只在定义它的函数内部有效,但在函数执行期间只分配一次内存空间,函数返回后,变量依然存在。 4. **局部变量**:只在其定义的函数或代码块内有效,当函数或代码块执行完毕后即被销毁。 #### ...
每次调用方法时,都会为局部变量分配新的内存空间。局部变量在方法执行完毕后会被自动销毁,因此它们的生命周期很短。局部变量必须先初始化才能使用,因为Java不允许未初始化的局部变量。 这三者的主要区别在于: ...
动态存储区则用于动态分配内存,如栈上的局部变量和堆上的动态分配内存,它们的生命周期与对应的函数调用或内存分配命令相关联。 理解局部变量、全局变量以及它们的存储属性对于编写高效、可靠且易于维护的代码至关...
局部变量的存储通常是在栈上分配的,当函数执行完毕,栈上的空间会被回收,局部变量也就随之消失。在某些情况下,可以使用`register`关键字尝试将变量存储在CPU寄存器中以提高效率,但这并不总是可行,取决于编译器...
static 局部变量只被初始化一次,下一次依据上一次结果值。static 函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。 六、内存分配 程序的局部变量存在于堆栈中,全局变量存在于静态区中,动态申请数据...
全局变量和局部变量是编程语言中两种不同的变量类型,它们在C++中有着明确的差异,主要体现在作用域、内存分配、生命周期以及对外链接性四个方面。 1. **作用域(Scope)** - **全局变量**:全局变量在整个程序...
首先,局部变量是在函数内部声明的变量,它们在函数执行时分配空间,在函数结束时被自动释放,遵循LIFO(后进先出)的原则,存储在栈区。栈区的管理由系统自动完成,速度快但空间有限,通常适用于短期、小规模的数据...
局部变量的生存时间和方法的生存时间是一致的,调用该方法时该局部变量被创建并分配内存空间,当方法调用结束时局部变量也就结束了。局部变量在使用前必须进行初始化,系统默认不会对局部变量进行初始化数据操作,...
指针做形参做局部变量以及内存分配 指针做形参是编程语言中的一种重要概念,它对程序的执行和结果产生重要影响。在C语言中,指针做形参可以分为一级指针和二级指针两种形式。一级指针做形参是指形参是一个指针变量...