对象存储

JS基础--数据在内存中的表现

坚强是说给别人听的谎言 提交于 2020-01-28 18:20:19
1、基本数据类型在内存中的存储 var str1 = 'aa'; var str2 = str1;//在栈中另外开辟一个空间存储str2,并将str1中的内容复制到str2中 str1 = 'bb'; console.log(str1);//bb console.log(str2);//aa 2、复杂数据类型在内存中的存储 //在堆区创建对象,在栈区分配空间并指向堆区对象 //首先p1指向栈区地址,栈区指向堆区空间Person //p2 = p1:在栈区又开辟一块地址,且指向堆区同一对象Person //所以修改p1,也会修改p2 function Person(name,age){ this.name = name; this.age = age; } var p1 = new Person('aa',23); var p2 = p1; p1.name = 'bb'; console.log(p1.name);//bb console.log(p2.name);//bb 3、基本类型作为函数的参数 var num1 = 10,num2 = 20;//num1,num2在栈区 fn(num1,num2); console.log(num1);//10 console.log(num2);//20 function fn(n1,n2){//函数在堆区,但是形参n1

C/C++ 面试知识点2

流过昼夜 提交于 2020-01-27 19:13:25
7.浅拷贝和深拷贝的原理 浅拷贝(位拷贝)就是两/多个对象共享一块内存,其缺点就是当析构一个对象的时候,另一个对象也不存在了,如果再使用它就会发生错误。 同一块资源释放多次,崩溃或者内存泄漏 深拷贝就是完完全全的复制出一个对象,两者在内存上无任何关系。 必须显式提供拷贝构造函数和赋值运算符 缺省拷贝构造函数 在拷贝过程中是按字节复制的,对于指针型成员变量只复制指针本身,而不复制指针所指向的目标--浅拷贝。 8.常见的不能声明为虚函数的有哪些? 普通函数(非成员函数) 静态成员函数 内联成员函数 构造函数 友元函数 9.C++的静态多态和动态多态 静态多态:运行前确定类型,采用的是函数重载和泛型 动态多态:运行后确定类型或者函数调用,采用虚函数实现 10.C++虚函数的原理 11.C++虚函数占用类的大小 因为只需要维护一个指向虚表的指针,所以大小为4或8个字节 静态成员和函数不计入sizeof中。 12.new与malloc的区别 new与malloc的10点区别 1. 申请的内存所在位置 : new操作符从 自由存储区(free store) 上为对象动态分配内存空间,而malloc函数从 堆 上动态分配内存。 自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区 自由存储区是否能够是堆(问题等价于new是否能在堆上动态分配内存

值类型和引用类型的深层理解

陌路散爱 提交于 2020-01-27 09:14:40
引言 山重水复疑无路,柳暗花明又一村,越探究越接近事物的本质。最近在学习原型模式(Prototype)时,发现原型模式本质就是对一个类原始数据的克隆,但在学习深拷贝和浅拷贝时又发现与值类型和引用类型有着千丝万缕的联系。回想好久都没有温习基础,于是就整理了值类型和引用类型的随笔,本文内容比较基础,对于想继续深入研究的同学可以查看IL更深入探究。 1.值类型(ValueType) 值类型包括:数值类型,结构体,bool型,用户定义的结构体,枚举,可空类型。 值类型的变量直接存储数据,分配在托管栈中。变量会在创建它们的方法返回时自动释放,例如在一个方法中声明Char型的变量name=’C’,当实例化它的方法结束时,name变量在栈上占用的内存就会自动释放 C#的所有值类型均隐式派生自System.ValueType。 结构体:struct(直接派生于System.ValueType)。 数值类型:整型,sbyte(System.SByte的别 名),short(System.Int16),int(System.Int32),long(System.Int64),byte(System.Byte),ushort(System.UInt16),uint(System.UInt32),ulong(System.UInt64),char(System.Char)。 浮点型:float

JVM 的内存模型

折月煮酒 提交于 2020-01-26 18:56:17
为什么要了解? 很多做Android开发的同学会问,我们为什么要了解这个呢?首先移动端资源有限,我们了解jvm的内存模型,便于我们更好的管理客户端的内存。 什么是JVM? java代码的执行过程如下图: 运行时数据区可分为:方法区、堆、虚拟机栈、本地方法栈、程序计数器五个部分。 概述 方法区:线程共享数据,存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。 堆:线程共享数据,主要是存放对象实例和数组。内部会划分出多个线程私有的分配缓冲区(Thread Local Allocation Buffer, TLAB)。可以位于物理上不连续的空间,但是逻辑上要连续。 虚拟机栈:线程隔离数据,每个方法在执行时都会床创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行结束,就对应着一个栈帧从虚拟机栈中入栈到出栈的过程。 本地方法栈:线程隔离数据,区别于 Java 虚拟机栈的是,Java 虚拟机栈为虚拟机执行 Java 方法(也就是字节码)服务,而本地方法栈则为虚拟机使用到的 Native 方法服务。 程序计数器:线程隔离数据,字节码解释器工作是就是通过改变这个计数器的值来选取下一条需要执行指令的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖计数器完成。 1.方法区  

c++编译器对属性和方法的处理机制一

六眼飞鱼酱① 提交于 2020-01-26 14:44:38
通过上面的案例,我们可以的得出: 1)C++类对象中的成员变量和成员函数是分开存储的 成员变量 : 普通成员变量:存储于对象中,与struct变量有相同的内存布局和字节对齐方式 静态成员变量:存储于全局数据区中 成员函数:存储于代码段中。 代码如下,注意看注释: #include "iostream" using namespace std; class C1 { public: int i; int j; int k; protected: private: }; class C2 { public: int i; int j; int k; static int m; public: int getK() const { return k; } void setK(int val) { k = val; } protected: private: }; struct S1 { int i; int j; int k; }; struct S2 { int i; int j; int k; static int m; }; int main(int argc, char* argv[]) { cout<<"类C1的存储空间:"<<sizeof(C1)<<endl; //输出12,表明只会计算非静态变量的总存储空间,而静态变量存储在全局区,函数存储在代码区

[VBA][Error1004]Sheet.cells.value引起的应用程序定义或对象定义错误

拟墨画扇 提交于 2020-01-26 12:01:54
[VBA][Error1004]Sheet.cells.value引起的"应用程序定义或对象定义错误" 问题描述 问题描述 将数据处理结果写入到结果Sheet时,最初使用Sheet.cells().value = date,突然弹出 很莫名其妙, 写入前30几条记录时并不会出错。 网上没能找到原因及解决办法。 #解决办法:** 具体发生的原因,至今仍不清楚。 通过观察cell对象的构成,发现单元格的内容存储在value2成员中 所以改成Sheet.cells().value2 = date, 不再报错。 PS. 这个问题之前应该也碰到过, 也是这么解决的, 只不过太久不用一次VBA忘记了, 耽误了几个小时的时间,这次记下来。 来源: CSDN 作者: YUAN 链接: https://blog.csdn.net/jyuan0204/article/details/103983903

数据结构基础(一)

痴心易碎 提交于 2020-01-26 00:54:46
基本概念 1.数据 数据是能够输入到计算机内的对象。 2.数据元素 数据元素是数据的基本单位(也成元素,记录,结点等)。 3.数据项 数据项即组成元素的最小单位,如学生信息表内的学号、姓名等。 4.数据对象 数据对象是性质相同的数据元素的集合,是数据的一个子集,如整数数据对象是集合N={0,±1,±2,……},字母字符数据对象是集合C={‘A’,‘B’,‘C’,…,‘a’,‘b’,…}等。 逻辑结构 1.集合结构 即数据元素除了“属于同一个集合”之外,没有其他关系,比如一个班级中的同学。 2.线性结构 即数据元素之间存在一对一的关系,比如将学生信息按照报道顺序排列组成一个线性结构。 3.树结构 即数据元素之间存在一对多的关系,比如一个班长管理多个组长,一个组长管理多个组员,构成树结构。 3.图结构(网状结构) 即数据元素之间存在多对多的关系,比如多个同学之间的朋友关系,构成图状结构(网状结构)。 总的来说数据结构分为两大类,即线性结构和非线性结构。 存储结构 1.顺序存储结构 顺序存储结构即按照数据对象在计算机中存储器的相对位置来表示数据元素之间的逻辑关系,通常借助程序设计语言的数组类型来描述。 2.链式存储结构 链式存储结构无需占用一整块的存储空间,但是为了表示数据对象之间的关系,需要给每个数据对象的结点附加指针字段,用于存放后继元素的存储地址

面试-集合

二次信任 提交于 2020-01-25 08:39:35
一、请说明List、Map、Set三个接口存取元素时,各有什么特点? 答:①List以特定索引来存取元素,可以有重复元素。 ②Set不能存放重复元素(用对象的equals()方法来区分元素是否重复)。 ③Map保存键值对映射,映射关系可以是一对一或者是多对一。 Set和Map容器都有基于哈希存储和排序树的两种实现版本,基于哈希存储的版本理论存取时间复杂度为O(1),而基于排序树版本的实现在插入或删除元素时会按照元素或元素的键构成排序树从而达到排序和去重的效果。 二、阐述ArrayList、Vector、LinkedLIst的存储性能和特性。 答:ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢。Vector中的方法由于添加了synchronized修饰,因此Vector是线程安全的容器,但性能上比较ArrayList差,因为已经是java中的遗留容器。 LinkedList使用的是双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 Vector属于遗留容器,已经不推荐使用,但是由于ArrayList和LinkedListed都是非线程安全的

007Java集合框架+Collection接口API+Iterator迭代器接口+Set接口+List接口+Map接口+Collections工具类

允我心安 提交于 2020-01-25 08:04:47
一.Java集合框架 Java集合概述(java.util包下) 一方面,面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另 一方面,使用Array存储对象方面具有一些弊端,而Java集合就像一种容器,可以动态地把多个对象的引用放入容器中。 Java集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组。 数组存储对象的特点:Student[] stu = new Student[20];stu[0] = new Student();弊端,一旦创建,其长度不可变。真实的数组存放的对象的个数是不可知的。 Java集合可分为Collection和Map两种体系 Collection接口:Set,元素无序、不可重复的集合,HashSet、LinkedHashSet、TreeSet。List,元素有序,可重复的集合,ArrayList、LinkedList、Vector。 Map接口:具有影射关系“key-value对”的集合。HashMap、LinkedHashMap、TreeMap、Hashtable(子类-Properties)。 二.Collection接口API Collection接口方法 1.size():返回集合中元素的个数 2.add(Object obj):向集合中添加一个元素 3.addAll

day07_Scanner类、Random类、ArrayList 类

大城市里の小女人 提交于 2020-01-24 10:24:24
API 概述 API(Application Programming Interface),应用程序编程接口。Java API是一本程序员的 字典 ,是JDK中提供给我们使用的类的说明文档。这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。所以我们可以通过查询API的方式,来学习Java提供的类,并得知如何使用它们。 API使用步骤 打开帮助文档。 点击显示,找到索引,看到输入框。 你要找谁?在输入框里输入,然后回车。 看包。java.lang下的类不需要导包,其他需要。 看类的解释和说明。 学习构造方法 使用成员方法/变量 引用类型使用步骤 类属于引用类型中的一种,所以去使用步骤符合引用类型的使用步骤。 1:导包 使用import关键字导包,在类的所有代码之前导包,引入要使用的类型,java.lang包下的所有类无需导入。 格式: 2:创建对象 使用该类的构造方法,创建一个该类的对象。 格式: 3:调用方法 调用该类的成员方法,完成指定功能。 格式: // 接收一个键盘录入的整数 int i = sc.nextInt(); Scanner类 Scanner使用步骤 查看类 java.util.Scanner :该类需要import导入后使用。 查看构造方法 public Scanner(InputStream source) :