内存类型

C#为什么要装箱和拆箱

蓝咒 提交于 2019-12-04 23:45:50
来自论坛4楼的回答非常棒,地址: https://bbs.csdn.net/topics/390624164?page=1 内容如下:    道理很简单,按理说C#被设计成一种完全面向对象的语言。因此,包括数字、字符、日期、布尔值等等在内的一切,都是对象。似乎只需要一种方式来对待这些对象就可以了。但是C#不是只停留在学院中和理想中,它必须为性能而妥协,我们知道,对于CPU来说,处理一个完整的对象,需要很多的指令,对于内存来说,又需要很多的内存。如果连整数都是对象,那么性能自然很低。C#于是使用了一种机制,使得这些基本类型在一般的编程中被当作非对象的简单类型处理,在另一些场合,又允许它们被视作是一个对象。这种机制就是装箱和拆箱。装箱后的对象看上去和一个对象一样,拥有方法,可以当作object处理,拆箱后的变量,看上去又如同C语言中的那些变量、结构体一样,可以直接参与运算和处理。 来源: https://www.cnblogs.com/A-Zero/p/11888766.html

Java与C++Socket通讯注意

醉酒当歌 提交于 2019-12-04 22:14:56
c++与java进行socket通信时注意事项 因为java发送的都是网络字节序(big-endium),而c++是主机字节序(little-endium),所以当消息中有整型,浮点型(应尽量避免使用)的时候需要用htonl,htons,ntohl,ntohs等函数转换一下,字符串由于是单字节排序的不需要转换,但应注意c++字符串是以'/0'作为结束符的,如果找不到'/0'可能会出现一些乱码,所以接收的时候可以分配一个length+1的buffer用来接收消息. 举例:c++ server, java client,假设开发的是c++ server,那么: java client--------->c++ server: c++ server需要调用ntohs,ntohl c++ server--------->java client: c++ server需要调用htons,htonl 至于浮点型可以使用以下的函数转换: float tcp_htonf(float f) { unsigned char *p, p0, p1; if(htons(1) ==1) return f; p =(unsigned char *)&f; p0 =p[0]; p1 =p[1]; p[0] =p[3]; p[3] =p0; p[1] =p[2]; p[2] =p1; return f; }

go中的数据结构接口-interface

a 夏天 提交于 2019-12-04 20:52:08
1. 接口的基本使用   golang中的interface本身也是一种类型,它代表的是一个方法的集合。任何类型只要实现了接口中声明的所有方法,那么该类就实现了该接口。与其他语言不同,golang并不需要显式声明类型实现了某个接口,而是由编译器和runtime进行检查。 声明 1 type 接口名 interface{ 2 方法1 3 方法2 4 ... 5 方法n 6 } 7 type 接口名 interface { 8 已声明接口名1 9 ... 10 已声明接口名n 11 } 12 type iface interface{ 13 tab *itab 14 data unsafe.Pointer 15 }   接口自身也是一种结构类型,只是编译器对其做了很多限制: 不能有字段 不能定义自己的方法 只能声明方法,不能实现 可嵌入其他接口类型 1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 // 定义一个接口 8 type People interface { 9 ReturnName() string 10 } 11 12 // 定义一个结构体 13 type Student struct { 14 Name string 15 } 16 17 // 定义结构体的一个方法。 18 // 突然发现这个方法同接口People的所有方法(就一个

JVM探究之 —— 类加载过程

假装没事ソ 提交于 2019-12-04 19:19:59
1. 类加载是什么 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 与那些在编译时需要进行连接工作的语言不同,在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为Java应用程序提供高度的灵活性,Java里天生可以动态扩展的语言特性就是依赖运行期动态加载和动态连接这个特点实现的。 2. 类加载的时机 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。其中验证、准备、解析3个部分统称为连接(Linking)。 上图中,加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班地开始,而解析阶段则不一定:它在某些情况下可以在初始化阶段之后再开始,这是为了支持Java语言的运行时绑定(也称为动态绑定或晚期绑定)。 3. 类加载的过程 3.1 加载 什么情况下需要开始类加载过程的第一个阶段:加载?Java虚拟机规范中并没有进行强制约束

sizeof

断了今生、忘了曾经 提交于 2019-12-04 18:45:21
本文转载百度百科。 编辑本段 用法   var a : array[1..10000] of longint;    Begin   Writeln(SizeOf(a));   End.   输出:40000   如果定义Integer,则输出:20000    c语言 中判断数据类型长度符   用法   sizeof(类型说明符, 数组 名或表达式);   或   sizeof 变量名   1. 定义:   sizeof是C/C++中的一个操作符(operator)是也,简单的说其作用就是返回一个对象或者类型所占的内存字节数。   MSDN上的解释为:   The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t.   其返回值类型为size_t,在头文件 stddef.h 中定义。这是一个依赖于编译系统的值,一般定义为   typedef unsigned int size_t;   世上 编译器 林林总总,但作为一个规范,它们都会保证char、signed char和unsigned  

JavaScript的数据类型

徘徊边缘 提交于 2019-12-04 17:42:13
  整理以前的面试题,发现问js数据类型的频率挺高的,回忆当初自己的答案,就是简简单单的把几个类型名称罗列了出来,便没有了任何下文。其实这一个知识点下可以牵涉发散出很多的知识点,如果一个面试者只是罗列的那些名词出来,可能面试官都不愿意继续问下去了,这该算是js基础的基础了。如果这个问题没有很好的回答,其他问题仍旧没有突出的亮点,很可能就过不了。   在网上看了一个体系,可作为大致的学习检阅自己的途径,按照清单上的知识检测自己还有哪些不足和提升,最后形成自己的知识体系。在工作、学习甚至面试时,可以快速定位到知识点。 1. JavaScript规定了几种语言类型 2. JavaScript对象的底层数据结构是什么 3. Symbol类型在实际开发中的应用、可手动实现一个简单的 Symbol 4. JavaScript中的变量在内存中的具体存储形式 5. 基本类型对应的内置对象,以及他们之间的装箱拆箱操作 6. 理解值类型和引用类型 7. null和 undefined的区别 8. 至少可以说出三种判断 JavaScript数据类型的方式,以及他们的优缺点,如何准确的判断数组类型 9. 可能发生隐式类型转换的场景以及转换原则,应如何避免或巧妙应用 10. 出现小数精度丢失的原因, JavaScript可以存储的最大数字、最大安全数字, JavaScript处理大数字的方法

关于指针类型和指针类型转换的理解

廉价感情. 提交于 2019-12-04 15:48:07
前几天在判断 “ 值相同的两个指针所指向的变量的值可以不同 ” 这句话时,发现自己对指针类型一些概念仅仅是记住了结论。于是查阅了一些资料,记录一下一些与指针类型和指针类型转化相关的知识。 一些用到的 开始之前,先来复习一些会用到的知识。 1.地址,字节,位   位(bit)是电子计算机中最小的数据单位。每一位的状态只能是0或1。   字节(Byte)是用于计量存储容量的一种单位,每一个字节由8位组成(1Byte = 8bit)。   地址可以理解为在一片内存中,每个字节(Byte)的编号。   他们在内存中的关系可以比作,内存是一栋大楼,字节(Byte)是大楼中的每一层,地址是楼层编号,位(bit)是每一层中的房间,每一层有8个房间。     2.变量的内存   编译器根据变量的类型,在内存中申请一块空间。例如32位与64位中 int 类型申请到4字节的空间,可理解为编译器申请了4层楼,作为”办公区域“。 3.指针变量   指针是指程序数据在内存中的地址。在c语言当中,允许用一个变量来存放指针,这种变量称为指针变量。 指针变量类型的作用 1   int a; 2   int *p; 3   p = &a; 4   printf("%p %d\n",p,*p);   以上程序中,”&“操作符取出了变量 a 在内存空间中的 首地址 ,而后通过 “ * ”

Python2和3字符编码的区别

只谈情不闲聊 提交于 2019-12-04 15:29:55
Python2和3字符编码的区别 一、字符编码应用之Python 1.1 执行Python程序的三个阶段 Python test.py (我再强调一遍,执行test.py的第一步,一定是先将文件内容从硬盘读入到内存中) test.py文件内容以gbk格式保存的,内容为: 阶段一:启动Python解释器 阶段二:Python解释器此时就是一个文本编辑器,负责打开文件test.py,即从硬盘中读取test.py的内容到内存中 此时,Python解释器会读取test.py的第一行内容, #coding:utf-8 或 #-*-coding:utf-8-*- ,以此决定以什么编码格式将代码读入内存,这一行就是设定Python解释器这个软件使用的编码格式。 可以用sys.getdefaultencoding()查看,如果不在Python文件指定头信息 #-*-coding:utf-8-*- ,那就使用Python默认的编码格式。 import sys sys.getdefaultencoding() 'utf-8' Python2中默认使用ascii,Python3中默认使用utf-8。 改正:在test.py指定文件头,字符编码一定要为gbk。即更正为 #coding:gbk 你好啊 阶段三:读取已经加载到内存的代码(Unicode编码格式),然后执行,执行过程中可能会开辟新的内存空间

12动态内部才能

不羁岁月 提交于 2019-12-04 13:29:39
12.1.1 shared_ptr #include<memory>头文件 使用动态内存的原因是允许多个对象共享相同的状态。 负责自动释放所指向的对象,允许多个指针指向同一个对象。 shared_ptr<string>p1; //指向string的share_ptr指针 shared_ptr<list<int>>p2; //指向int的list的share_ptr指针。 一般的操作:shared_ptr和unique_ptr都支持 shared_ptr 操作 shared_ptr<T> sp 空智能指针,可以指向类型为T的对象 p 将p作为一个条件判断,若p指向一个对象,则为true *p 解引用p,获得它指向的对象 p->men 等价于(*p).men p.get() 返回p中保存的指针,要小心使用,若智能指针释放了其对象,返回的指针所指向的对象也就消失了。 swap(p,q) 交换p和q中的指针 p.swap(q) 交换p和q中的指针 shared_ptr特有支持的操作 shared_ptr 操作 make_shared<T>(args) 返回一个share_ptr,指向一个动态分配的类型为T的对象。使用args初始化此对象。 shared_ptr<T>p(q) p是shared_ptr q的拷贝:此操作会递增q中的计数器。q中的指针必须能转换为T*. p = q

《吊打面试官》系列-Redis常见面试题(带答案)

限于喜欢 提交于 2019-12-04 09:11:21
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub 上已经开源 https://github.com/Java… ,有面试点思维导图,欢迎 Star 和 完善 前言 Redis 在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在 Redis 的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚( 请允许我使用一下夸张的修辞手法 )。 于是在一个寂寞难耐的夜晚,我痛定思痛,决定开始写 《吊打面试官》 系列,希望能帮助各位读者以后面试势如破竹,对面试官进行360°的反击,吊打问你的面试官,让一同面试的同僚瞠目结舌,疯狂收割大厂Offer! 絮叨 上一期因为是在双十一一直在熬夜的大环境下完成的,所以我自己觉得质量明显没之前的好,我这不一睡好就加班加点准备补偿大家,来点干货。(熬夜太容易感冒了,这次 点个赞 别白嫖了!) 顺带提一嘴,我把我准备写啥画了一个思维导图,以后总不能每篇都放个贼大的图吧,就开源到了我的 GitHub ,大家有兴趣可以去完善和 Star 。 这篇我就先放出来大家看看,感觉还是差点意思,等大家完善了。 回望过去 上一期吊打系列我们提到了 Redis 相关的一些知识,还没看的小伙伴可以回顾一下 《吊打面试官》系列-Redis基础