变量的内存存放与作用域

简介: 1.变量的声明、定义、初始化 一个程序可由多个源文件实现。 变量可以多次声明,但只能被定义一次。 声明通过extern关键字实现。 extern int i;  //声明 int j;   //定义 2.变量的内存存放 全局变量与局部变量在没有初始化时,取初值的方式不同。前者是全0. c++内存分为代码、堆、栈、常量和全局//静态存储区。 不同变量的存储位置: 全局/

1.变量的声明、定义、初始化

一个程序可由多个源文件实现。

变量可以多次声明,但只能被定义一次。

声明通过extern关键字实现。

extern int i;  //声明

int j;   //定义

2.变量的内存存放

全局变量与局部变量在没有初始化时,取初值的方式不同。前者是全0.

c++内存分为代码常量全局//静态存储区。

不同变量的存储位置:

全局/静态存储区——全局变量,static变量;

栈——局部变量、函数调用时的参数。栈的容量一般比较有限;

堆——new运算符分配,需由delete释放;若分配失败,new返回NULL,记得安全性检查。

常量存储区——这是一块比较特殊的存储区,里面存放的是常量。

3.标示符的作用域

 for(int i=0;i<10;i++){//i仅在这里和for小括号内有效} 

c++中大多数作用域都以大括号分隔。

:: 类的作用域分辨符

#include<iostream>
using namespace std;
void show(){cout<<"hello";}
class A{
public:
		static void show(){cout<<"hi ";}
		static void fun(){
			show();  //成员函数
			::show(); //全局函数
		}

};
int main(int argc, char** argv)
{
	A::fun();
	return 0;
}
/*hi hello*/


4.内联函数

函数的调用是有开销的。比如:保存CPU环境、实参到形参的传递、函数执行完返回、恢复CPU环境。而使用inline函数可以达到空间换时间的效果。它告诉编译器把此函数插入到调用的地方去。

关键字inline 必须与函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起任何作用。 

如下风格的函数Foo 不能成为内联函数: 

inline void Foo(int x, int y); // inline 仅与函数声明放在一起 

void Foo(int x, int y){} 

 

而如下风格的函数Foo 则成为内联函数: 

void Foo(int x, int y); 

inline void Foo(int x, int y) // inline 与函数定义体放在一起{} 

所以说,inline 是一种“用于实现的关键字”,而不是一种“用于声明的关键字”。


 

目录
打赏
0
0
0
0
14
分享
相关文章
|
5月前
|
C++
析构造函数就是为了释放内存,就是在局部指针消失前释放内存,拷贝构造函数就是以构造函数为模块,在堆里面新开一块,同一个变量在堆里面的地址
本文讨论了C++中构造函数和析构函数的作用,特别是它们在管理动态内存分配和释放中的重要性,以及如何正确地实现拷贝构造函数以避免内存泄漏。
66 2
|
7月前
|
Python变量的作用域_参数类型_传递过程内存分析
理解Python中的变量作用域、参数类型和参数传递过程,对于编写高效和健壮的代码至关重要。正确的应用这些概念,有助于避免程序中的错误和内存泄漏。通过实践和经验积累,可以更好地理解Python的内存模型,并编写出更优质的代码。
56 2
|
8月前
|
开发与运维数组问题之指针的定义语法如何解决
开发与运维数组问题之指针的定义语法如何解决
48 6
Rust 问题之TypeScript 代码,变量 s 存储在栈内存中还是堆内存中如何解决
Rust 问题之TypeScript 代码,变量 s 存储在栈内存中还是堆内存中如何解决
Java面试题:如何在不牺牲性能的前提下,实现一个线程安全的单例模式?如何在生产者-消费者模式中平衡生产和消费的速度?Java内存模型规定了变量在内存中的存储和线程间的交互规则
Java面试题:如何在不牺牲性能的前提下,实现一个线程安全的单例模式?如何在生产者-消费者模式中平衡生产和消费的速度?Java内存模型规定了变量在内存中的存储和线程间的交互规则
69 0
面试官:JS中变量定义时内存有什么变化?
面试官:JS中变量定义时内存有什么变化?
56 0
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
83 0
Elasticsearch集群JVM调优设置合适的堆内存大小
Elasticsearch集群JVM调优设置合适的堆内存大小
733 1
|
14天前
|
JVM: 内存、类与垃圾
分代收集算法将内存分为新生代和老年代,分别使用不同的垃圾回收算法。新生代对象使用复制算法,老年代对象使用标记-清除或标记-整理算法。
18 3
深入探索Java虚拟机(JVM)的内存管理机制
本文旨在为读者提供对Java虚拟机(JVM)内存管理机制的深入理解。通过详细解析JVM的内存结构、垃圾回收算法以及性能优化策略,本文不仅揭示了Java程序高效运行背后的原理,还为开发者提供了优化应用程序性能的实用技巧。不同于常规摘要仅概述文章大意,本文摘要将简要介绍JVM内存管理的关键点,为读者提供一个清晰的学习路线图。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等