变量

静态变量、全局变量和局部变量

家住魔仙堡 提交于 2020-03-28 06:44:07
在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 堆和栈的区别: 一、预备知识——程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分: 1、栈区(stack)——由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap)—— 一般由程序员分配(如new、malloc)和释放(delete,free), 若程序员不释放,程序结束时可能由OS回收,但这样会导致内存泄露,严重的导致系统崩溃, 如一个程序是长期运行的,申请的变量永远都得不到释放,系统内存会耗尽。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、全局区(静态区)(static)——全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 程序结束后由系统释放。 4、文字常量区 —— 常量字符串就是放在这里的。 程序结束后由系统释放 。 5、程序代码区 —— 存放函数体的二进制代码。 堆区就就是就是存放new出来的变量的 1.从作用域看: C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种: 1、全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然

数据内存管理

家住魔仙堡 提交于 2020-03-28 06:24:41
根据用于分配内存的方法,C++提供了3种管理数据内存的方式:自动存储、静态存储和动态存储(也称自由存储空间或堆)。在存在时间的长短方面,以这3种方式分配的数据对象各不相同。 1、自动存储 在函数内部 定义的 常规变量使用自动存储空间,被称为自动变量,这意味着它们在所属的函数被调用时自动产生,在该函数结束时消亡。 实际上,自动变量是一个局部变量,其作用域为包含它的代码块。代码块是被包含在花括号中的一段代码。到目前为止,我们使用的所有代码块都是整个函数 。 如for循环函数、if条件判断函数(特别注意:if( ; ; ){…},容易忽略)。 函数内也可以有代码块,如果在其中的某个代码块定义一个变量,则该变量仅在程序执行该代码块中的代码时存在。 自动变量通常存储在栈中。这意味着执行代码块时,其中的变量将依次加入到栈中,而在离开代码块时,将按相反的顺序释放这些变量,这被称为后进先出。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 2、静态存储 静态存储是整个程序执行期间都存在的存储方式。使变量称为静态的方式有两种:一种是在函数外面定义它;另一种是在声明变量时使用关键字static。 自动存储和静态存储的关键在于:这些方法严格限制了变量的寿命。 3、动态存储 new和delete运算符提供了一种比自动变量和静态变量更灵活的方法。它们管理一个内存池,这在C+

内存划分

三世轮回 提交于 2020-03-28 06:12:04
1、//内存区域的划分(从低到高) //1.栈区 //2.堆区++++++++++++++重点+++++++++++ //3.静态区(全局区) //4.常量区 //5.代码区 2、static int number = 10;//被static 修饰的全局变量生命周期随着程序的创建而创建,随着程序的消失而消失; 3、//局部变量:定义在函数内部的变量就叫做局部变量,局部变量都是存储在栈区 3、//内存管理的时候系统也是遵循内存对齐原则,因为这样可以提高内存的分配效率 4、//静态区(全局区) //有static 修饰的变量存放在静态区,静态区的变量有一个特点,整个程序运行中,只被初始化一次;如果人为未初始化,系统默认初始化为0 5、//系统提供的函数由于使用比较频繁,我们把它存放在栈区,原因是栈区的内容会被反复的创建销毁,不需要我们去管理内存还是因为栈区的内存开辟和释放的内存 6、//代码区:程序中运行的函数或者变量等等语句都会编译成CPU指令,存放在代码区; 7、 malloc calloc realloc memset (要做释放free(p);操作并赋值p =Null) memcpy memcmp (不用做释放操作) // free(p);//释放掉p 指向的堆区空间,只是标记删除,不清空里面的内容 // free(p); 过度释放,释放多次,过度释放会造成crash 崩溃

js面向对象

天大地大妈咪最大 提交于 2020-03-28 06:00:08
                             JS——面向对象 1.面向对象:  js一开始就是写网页特效 面向过程的,作者发现这样写不好,代码重复利用率太高,计算机内存消耗太大,网页性能很差。所以作者就受到Java和c语言的影响,往 面向对象 靠齐。js天生有一个object,但他没有面向对象的特征(封装 继承 多态)。最后研究出了 构造函数。 构造函数的最终目的是生成对象。 我们把封装的那个函数叫类 类里面的属性是私有的。 类原型上的属性是公有的,可继承的。 (1)类身上自带一个prototype的属性,属性值是对象。 (2)prototype对象天生有一个constructor属性,属性值是类本身。 (3)实例天生有一个--proto--指向自己类的原型。    原型链主要针对 对象的属性 来说; 作用域链主要是针对 变量 来说的。 2.var a和a的区别: 没有带var的变量就不能存放到内存地址中 , 就没有变量提升这种说法了。相当于给window加了一个属性window.a。 带var 可以存放在内存地址中,有变量提升,同时也相当于给window加了一个属性window.a 来源: https://www.cnblogs.com/yuanjingjing/p/9896339.html

js中级1.0

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-28 05:59:57
面向对象 Js一开始就是写网页特效,面向过程的,作者发现这样写不好,代码重复利用率太高,计算机内存消耗太大,网页性能很差。所以作者就收到java和c的影响,往面向对象靠齐。Js天生有一个Object,但他没有面向对象的特征(封装,继承,多态)。最后研究出了构造函数。 构造函数最终目的是生成对象。 我们把封装的那个函数叫 类 类里面的属性是私有的。 类原型上的属性是公有的,可继承的。 类身上天生自带一个prototype的属性,属性是对象 Prototype对象天生有一个constructor属性,属性值就是类本身 实例天生有一个__proto__ 指向你自己类的原型 原型链主要针对对象的属性来说的 作用域链主要针对变量来说的 var a和a的区别 没有带var的变量就不能存放到内存地址中。就没有变量提升这种说法了。相当于给window加了一个属性window.a。 带var 可以存放在内存地址中,有变量提升,同时也相当于给window加了一个属性window.a Beike 来源: https://www.cnblogs.com/jiaxinchao/p/9896748.html

Web-js中级-11月2日

孤街醉人 提交于 2020-03-28 05:58:13
一:   面向对象   js一开始就是写网页特效,面向过程的,作者发现这样写不好,代码重复利用率太高,计算机内存消耗太大,网页性能很差。所以作者就收到java 和 c的影响,往面向对象靠齐。Js天生有一个Object,但他没有面向对象的特征(封装,继承,多态)。最后研究出了构造函数。 构造函数最终目的是生成对象。 我们把封装的那个函数叫类。 类里面的属性是私有的。 类原型上的属性是公有的,可继承的。 1. 类身上天生自带一个prototype的属性,属性值是对象。 2.Prototype对象天生有一个construstor属性,属性值就是类本身 3.实例天生有一个--proto--指向你自己类的原型 原型链主要针对对象的属性来说的。 作用域链主要是针对变量来说的。 var a和a的区别:   没有带var的变量就不能存放到内存地址中。就没有变量提升这种说法了。相当于给window加了一个属性window.a。 带var 可以存放在内存地址中,有变量提升,同时也相当于给window加了一个属性window.a 来源: https://www.cnblogs.com/lovels/p/9911363.html

静态内存和堆栈

╄→гoц情女王★ 提交于 2020-03-28 05:40:25
一、内存基本构成 可编程内存在基本上分为这样的几大部分:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。 静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。 栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 堆区:亦称动态内存分配。程序在运行的时候用malloc或new申请任意大小的内存,程序员自己负责在适当的时候用free或delete释放内存。动态内存的生存期可以由我们决定,如果我们不释放内存,程序将在最后才释放掉动态内存。 但是,良好的编程习惯是:如果某动态内存不再使用,需要将其释放掉,否则,我们认为发生了内存泄漏现象。 代码区:存放函数体的二进制代码 文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放 函数指针指向Code区,是程序运行的指令代码,数据指针指向Data,Heap,Stack区,是程序依赖以运行的各种数据 在文件作用域声明inline函数默认为static存储类型,const常量默认为static存储,如果加上extern,则为外部存储类型。 二、三者之间的区别 我们通过代码段来看看对这样的三部分内存需要怎样的操作和不同,以及应该注意怎样的地方

C++this指针详解

心不动则不痛 提交于 2020-03-28 05:18:12
  以前对this指针误解挺多的,在这里单独写一篇进行总结,有不对之处,欢迎指正批评! 一、问题 1.一个类中的不同对象在调用自己的成员函数时,其实它们调用的是同一段函数代码,那么成员函数如何知道要访问哪个对象的数据成员呢?   没错,就是通过this指针。每个对象都拥有一个this指针,this指针记录对象的内存地址,当我们调用成员函数时,成员函数默认第一个参数为T* const register this,大多数编译器通过ecx寄存器传递this指针,通过 this 这个隐式参数可以访问该对象的数据成员。 2.类的成员函数为什么不能用static和const同时修饰?   类中用const修饰的函数通常用来防止修改对象的数据成员,函数末尾的const是用来修饰this指针,防止在函数内对数据成员进行修改,而静态函数中是没有this指针的,无法访问到对象的数据成员,与C++ static语义冲突,所以不能。 二、this指针注意点 1.C++中 this关键字 是一个指向对象自己的一个常量指针,不能给this赋值; 2.只有成员函数才有this指针,友元函数不是类的成员函数,没有this指针; 3.同样静态函数也是没有this指针的,静态函数如同静态变量一样,不属于具体的哪一个对象; 4.this指针作用域在类成员函数内部,在类外也无法获取; 5.this指针并不是对象的一部分

\"匿名\"的对象类型

大憨熊 提交于 2020-03-28 04:41:40
1.3.3 "匿名"的对象类型 2010-10-30 08:13 金旭亮 电子工业出版社 我要评论( 0 ) 字号: T | T 综合评级: 想读(0) 在读(0) 已读(8) 品书斋鉴(3) 已有8 人发表书评 《.NET4.0面向对象编程漫谈(基础篇)》第1章.NET面向对象编程基础,本章主要向读者介绍.NET面向对象编程的基础知识,前两节介绍.NET是什么、怎样基于.NET平台开发应用程序、.NET程序的运行机理等内容,其目的是帮助读者形成一个对.NET平台的总体认识。本节为大家介绍"匿名"的对象类型。 AD: 1.3.3 "匿名"的对象类型 在C# 3.0以上版本中,我们可以使用var关键字定义一种奇怪的"没有类型"的变量(称为"隐式类型的局部变量"): var Sum = 100; Console.WriteLine(Sum * 2); //输出:200 貌似CLR很聪明地可以动态推断出Sum是一个int类型的变量。 事实上,是C#编译器而不是CLR完成了类型推断的工作,C#编译器根据赋的值"100"推断Sum是一个int类型的变量,就直接生成了将常量"100"赋值给它的IL代码,CLR仅仅只是机械地执行罢了。 当使用var定义隐式类型的局部变量时,必须保证编译器能推断得出变量类型,否则,不能通过编译。 var只能用于方法内部定义局部变量,不能定义为类的字段。例如

adt-bundle环境搭建(Win7+Win10)

血红的双手。 提交于 2020-03-27 23:49:02
一、adt-bundle安装包 安装包的下载地址: http://tools.android-studio.org/index.php/adt-bundle-plugin 链接中包含有windows、mac osx、linux环境的安装包。 下载好的压缩包直接解压,不用安装。解压之后放在磁盘的根目录下,如下图: 注意路径是英文路径,不要含中文。打开文件夹,可以看到如下图内容: 二、Win7系统环境配置 1、新建系统变量: 点击 计算机---->属性--->高级系统设置--->环境变量,到如下界面: 点击上图中“系统变量”中的“新建”按钮,新建一个环境变量,如下所示: 变量名:ANDROID_HOME 变量值:D:\adt-bundle-windows-x86_64-20140702\sdk 按照上面的输入后点击确定。注意这里后缀是没有分号的。 2、编辑path变量: 在系统变量里面找到path变量,如下所示: 点击编辑进入编辑系统变量窗口,在“变量值(V)”输入框的最后面(绿色箭头所指的地方)加入下面的变量值: ;%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\build-tools\android-4.4W 注意:前面是有分号(英文分号)的!!!变量与变量之间必须有逗号隔开。 最后点击保存