展开

关键词

面试总结-C++

,但不能被模块其他函数访问 模块的 static 函数只可被这一模块的其他函数调用,这个函数的使用范围被限制声明它的模块。 malloc仅仅分配内存空间,free仅仅回收空间,不具备调用构造函数析构函数功能,用malloc分配空间存储的对象存在风险;newdelete除了分配回收功能,还会调用构造函数析构函数。 因为静态成员属于整个,而不属于某个对象,如果在初始化,会导致每个对象都包含该静态成员,这是矛盾的。 《c++primer》里面说定义初始化是保证static成员变量只被定义一次的好方法。 7.保证构造、析构、swap不会失败 类型安全 与 线程安全 、异常安全、事务安全 其他 为什么说栈比堆要快 分配释放:堆分配释放时都要调用函数(MALLOC,FREE),比如分配时会到堆空间去寻找足够大小的空间

65811

C++面试知识总结

1.程序运行知识 1.1 内存布局分配方式 C程序的内存布局如下: ? 静态存储区:存储全局变量static变量,通常在程序编译期间已经分配好了。 2.18 static全局变量与普通的全局变量的区别 全局变量整个工程文件都有效。 静态全局变量只定义它的文件内有效。 全局变量和静态变量如果没有手工初始化,则由编译器初始化为0。 2.19 static局部变量普通局部变量的区别 静态局部变量只定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失,直到程序运行结束后才释放。 多态:通过继承同一个基,产生了相关的不同的派生,与基中同名的成员函数不同的派生会有不同的实现,也就是说:一个接口、多种方法。 模块的static全局变量可以被模块所用函数访问,但不能被模块其它函数访问。 模块的static函数只可被这一模块的其它函数调用,这个函数的使用范围被限制声明它的模块

45841
  • 广告
    关闭

    老用户专属续费福利

    云服务器CVM、轻量应用服务器1.5折续费券等您来抽!

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++基础闯关100题,你能闯多少?【2021超硬核大厂高频面试题】

    栈,执行函数时,函数局部变量的存储单元都可以栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 全局/静态存储区,全局变量和静态变量被分配到同一块内存中,以前的C语言中,全局变量又分为初始化的未初始化的,C++里面没有这个区分了,他们共同占用同一块内存区。 申请效率不同:栈由系统分配,速度快,不会有碎片;堆由程序员分配,速度慢,且会有碎片。 7、说一说C与C++的内存分配方式? 从静态存储区域分配模块的static全局变量可以被模块所用函数访问,但不能被模块其它函数访问; 模块的static函数只可被这一模块的其它函数调用,这个函数的使用范围被限制声明它的模块中的 静态局部变量全局变量一样,数据都存放在全局区域,所以主程序之前,编译器已经为其分配好了内存,但在CC++中静态局部变量的初始化节点又有点不太一样。

    30420

    【面试题系列】——Java基础

    所以设置环境变量的根本目的是电脑的任何一个文件夹下都可以编译运行Java程序。 1.4 JavaC++区别 题外话,JavaC++有什么区别? 前者会被JVM分配常量池中,常量池中没有重复的元素,如果再次创建一个字符串变量等于i的话,就会直接指向常量池中的i。 后者是new了一个对象,堆中是允许对象重复的。 前者会被JVM分配常量池中,常量池中没有重复的元素。 String str1 =“i”; String str2 =“i”; str2不会重新创建一个常量,而是指向str1。 软件开发的范围,就是通过抽象出系统功能而实现最大化代码复用的开发模式。 4.2 封装相关 什么是封装 通过隐藏实现,暴露接口,一来实现代码解耦,二来通过访问修饰符保证数据安全。 接口抽象区别

    21030

    【笔记】《C++Primer》—— 第7章:

    7.1 定义抽象数据类型 封装的目的是使得接口与实现之间的分离,隐藏实现细节使用户无需理解细节就能使用 C++中既可以用struct也可以用class,其区别在于默认的访问权限 的成员函数必须声明 classstruct的区别在于class默认是private,struct默认是public 有时我们需要外部的接口函数也可以访问的非公有成员,可以将那些函数令为友元,即将函数声明一下, ,一旦遇到名,定义的剩余部分就在的作用域之内了,这里的剩余部分即后面的参数列表函数体,不包含前面的返回部分 好好理解第一点就可以理解为什么当外部定义的函数名中出现了对其的指示后,后面就不再需要这个指示的出现了 ,定义时不需要写 explicit关键字的构造函数只能用于直接初始化,即不能用在之后会说到的拷贝构造中 当一个所有成员是public,没有构造函数,没有初始值且没有基虚函数时,这个称为聚合 const属性的初始值或用constexpr来初始化 要注意由于静态变量不是由构造函数初始化的,一般来说我们不能在初始化它,而是声明它然后定义并初始化它 由于的它的初始化只是声明而已

    25620

    java面试题汇总一(会持续更新)

    静态变量在内存中只有一份拷贝,JVM加载的时候,只为静态分配一次内存。 Static修饰的代码块叫静态代码块,通常用来做程序优化的。静态代码块中的代码整个加载的时候只会执行一次。 因为内存分配的方式不一样。 第一种,创建的”aaa”是常量,jvm都将其分配常量池中。 第二种创建的是一个对象,jvm将其值分配在堆内存中。 96.线程与进程的区别 进程是系统进行资源分配调度的一个独立单位,线程是CPU调度分派的基本单位 进程线程的关系: 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。 资源分配给进程,同一进程的所有线程共享该进程的所有资源。 线程执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。 线程是指进程的一个执行单元,也是进程的可调度实体。 系统开销:创建或撤销进程的时候,由于系统都要为之分配回收资源,导致系统的明显大于创建或撤销线程时的开销。

    21100

    Java虚拟机

    jvm中的栈对的区别:堆会抛出 OutOfMemoryError异常,但是栈会产生两异常:StackOverflowError OutOfMemoryError 简述方法区 方法区用于存储被虚拟机加载的信息 、常量静态变量等数据。 「JDK8将运行时常量池存放堆中。」 简述直接内存 直接内存也称为堆内存,就是把内存对象分配在JVM堆的内存区域。这部分内存不是虚拟机管理,而是由操作系统来管理。 简述java创建对象的过程 检查该指令的参数能否常量池中定位到一个的符号引用,并检查引用代表的是否已被加载、解析初始化,如果没有就先执行加载。 通过检查通过后虚拟机将为新生对象分配内存。 可作为 GC Roots 的对象包括虚拟机栈本地方法栈中引用的对象、静态属性引用的对象、常量引用的对象。 简述java的引用类型 强引用: 被强引用关联的对象不会被回收。

    6600

    【编程基础】如何赢得C++面试

    12.描述内存分配方式以及它们的区别? 1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 2)栈上创建。 执行函数时,函数局部变量的存储单元都可以栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集。 3)从堆上分配,亦称动态内存分配。 2)有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。 10.简述数组与指针的区别? 数组要么静态存储区被创建(如全局数组),要么栈上被创建。 2).模块(但在函数体外),一个被声明为静态的变量可以被模块所用函数访问,但不能被模块其它函数访问。它是一个本地的全局变量。 3).模块,一个被声明为静态的函数只可被这一模块的其它函数调用。那就是,这个函数被限制声明它的模块的本地范围使用。 感谢shengliz的分享,部分内容摘自csdn博客

    60670

    C#学习笔记三: C#类型详解..

    值类型引用类型的区别在实际数据的存储位置:值类型的变量实际数据都存储堆栈中; 而引用类型则只有变量存储堆栈中,变量存储实际数据的地址,实际数据存储与地址相 对应的托管堆中。 所以与引用相比,只类型性能上更具有优势。 3。若只类型的密封的(sealed), 你将不能把只类型作为其他任何类型的基;而引用类型则一般具有继承性,这里指的是接口。 4。 3,常量与变量 这里主要讲一下静态常量const动态常量readonly 1)const修饰的常量声明的时候必须初始化;readonly修饰的常量则可以延迟到构造函数初始化 2)const修饰的常量在编译期间就被解析 ,即常量值被替换成初始化的值;readonly修饰的常量则延迟到运行的时候 此外const常量既可以声明中也可以函数体内,但是static readonly常量只能声明中。 3、而带有静态构造函数的静态字段,只有引用到的时候才进行初始化。

    501140

    JVM运行时数据区各个区域的作用

    但有以下如图示区别:实例方法中第一个位置存放的是它所属对象的引用,而静态方法则没有对象的引用。另外静态方法里所操作的静态变量存放在方法区。 方法区 它是虚拟机加载文件时,用于存放已加载的信息,常量静态变量,及jit编译后的代码(方法)等数据的内存区域,是线程共享的。 5.静态变量: 就是变量,被的所有实例对象共享,我们只需知道,方法区有个静态区,静态区专门存放静态变量和静态块。 6.到ClassLoader的引用:到该类的装载器的引用。 JDK1.4中新加入了NIO(New Input/Output),引入了一种基于通道(Channel)与缓冲区(Buffer)的I/O方式,它可以使用Native方法库直接分配内存,然后通过一个存储 对象的实例变量对象一起堆里,所以各个线程都可以共享访问对象的实例变量。 静态变量方法区,所有对象共享。字符串常量常量在运行时常量池。

    39010

    java内存分配String类型的深度解析

    2、String类型执行连接操作时,效率为什么会比StringBuffer或者StringBuilder低?StringBufferStringBuilder有什么联系区别装载子系统(Classloader Sub-System):除了要定位导入二进制class文件,还必须负责验证被导入的正确性,为变量分配并初始化内存,以及帮助解析符号引用。 虚拟机为每个被装载的类型维护一个常量池,池中为该类型所用常量的一个有序集合,包括直接常量(string、integerfloat常量)对其他类型、字段方法的符号引用(与对象引用的区别? 例如,String s2 = “myString”,运行时s2会从内部字符串常量列表得到s1的返回值,所以s2s1都指向同一个String对象。 堆中new出来的实例常量池中的“myString”是什么关系呢? 常量池中的字符串常量与堆中的String对象有什么区别呢? 为什么直接定义的字符串同样可以调用String对象的各种方法呢?

    66110

    java内存分配String类型的深度解析

    2、String类型执行连接操作时,效率为什么会比StringBuffer或者StringBuilder低?StringBufferStringBuilder有什么联系区别装载子系统(Classloader Sub-System):除了要定位导入二进制class文件,还必须负责验证被导入的正确性,为变量分配并初始化内存,以及帮助解析符号引用。 虚拟机为每个被装载的类型维护一个常量池,池中为该类型所用常量的一个有序集合,包括直接常量(string、integerfloat常量)对其他类型、字段方法的符号引用(与对象引用的区别? 例如,String s2 = “myString”,运行时s2会从内部字符串常量列表得到s1的返回值,所以s2s1都指向同一个String对象。 堆中new出来的实例常量池中的“myString”是什么关系呢? 常量池中的字符串常量与堆中的String对象有什么区别呢? 为什么直接定义的字符串同样可以调用String对象的各种方法呢?

    27010

    C++基础 杂记(一)

    记录以下几点: const修饰符 static修饰符 C++指针引用的区别栈的区别 const修饰符 const int m=7;:整型变量m的值为固定值7,不可改变 const int* p1 **,包括全局静态变量和局部静态变量,初始化自动为 0 修饰成员 静态成员是属于整个的而不是某个对象,静态成员变量只存储一份供所有对象共用。 静态成员**可以**通过双冒号来使用<名>::<静态成员名>,非静态成员引用**必须**与特定对象相对对象.成员名 静态成员函数中**不能**使用的非静态成员(因为**静态成员函数属于整个实例化对象之前就已经分配空间了 **,而非静态成员实例化对象后才有内存空间,因而静态成员不认识后来的非静态成员) 的非静态成员函数可以调用用静态成员函数,但反之不能 静态成员函数没有 this 指针(因其属于整个静态成员变量必须先初始化再使用 ,没有静态分配的堆 栈有静态分配(由编译器完成,比如局部变量)动态分配(由alloca函数进行分配) 堆由C/C++函数库提供,机制较复杂 栈由计算机底层提供支持 进程线程的区别 进程是资源分配的最小单位

    19810

    java内存区域划分详解

    局部变量表存放了编译期可知的各种数据类型,对象引用返回地址类型,并且它所需要的内存空间在编译期完成分配方法运行期间不会改变局部变量表的大小。 在这块区域,可能出现的异常,当在堆中没有内存可以完成实例对象的分配时,堆也无法再扩展时,会出现OutOfMemoryError错误信息。 下面说下方法区吧,方法区也是线程共享的,方法区用于存储虚拟机加载的信息,常量静态变量,及时编译器JIT编译后的代码等数据,这块区域的内存回收目标主要是针对常量池的回收对类型的卸载。 Class文件中除了有的版本,字段,方法,接口等描述信息,还有一项就是常量池,用于存放编译期生成的各种字面量符号引用,这部分内容将在加载后进入方法区的运行时常量池中存放。 一般来说,除了保存Class文件中的符号引用,还会把翻译出来的直接引用也存储在运行时常量池中。

    40241

    硬核 | C++ 基础大全

    (补充:静态常量数据成员,其只能在定义初始化,仅是声明而已。) 作用五:成员/函数声明 static 函数体内 static 变量的作用范围为该函数体,不同于 auto 变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值; 模块的 static 全局变量可以被模块所用函数访问,但不能被模块其它函数访问; 模块的 static 函数只可被这一模块的其它函数调用,这个函数的使用范围被限制声明它的模块中的 static 成员变量属于整个所拥有 结构体内存对齐方式为什么要进行内存对齐? 如何实现只能静态分配只能动态分配 前者是把 new、delete 运算符重载为 private 属性。

    9210

    CC++ 学习笔记二(变量、表达式)

    计算机中提供给变量两个信息 变量地址 ,操作系统给变量分配的若干内存的首地址 变量的值 ,内存单元中存放的数据 从变量的存储位置进行区分,可分为 内存 CPU的寄存器 两 从变量的生命周期进行区分 而在C语言提供4种存储类型 1.auto 自动 2.static 静态 3.register 寄存器 4.extern 外部 外部变量内部变量的区别 ? 外部、内部变量的区别十分简单,内部变量指的是函数的变量,函数的变量便是外部变量(全局变量)。 而内部变量仅能被作用域访问,他存储方式是动态存储,它生命周期超出作用域后会被回收。(auto对象) 全局变量和静态变量的区别 ? C语言中,可以使用static声明一个静态变量,也可以函数声明一个全局变量,其他文件使用extern对该变量进行访问。他们两者的存储方式都是使用静态存储方式,存储在内存的静态存储区。

    42500

    cc++常见面试题

    存储静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储静态存储区:全局变量static变量。 (3)static的第三个作用是默认初始化为0。 不要一听到const就说是常量,这样给考官一种一个外行交谈的感觉。 区别: 1)const是有数据类型的常量,而宏常量没有,编译器可以对前者进行静态类型安全检查,对后者仅是字符替换,没有类型安全检查,而且字符替换时可能会产生意料不到的错误(边际效应)。 C++中引用指针的区别? 执行函数时,函数局部变量的存储单元都可以栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

    12830

    相关产品

    • 云数据库独享集群

      云数据库独享集群

      腾讯云数据库独享集群(DBDC),简称独享集群,可以让您以**独享主机**资源方式购买、创建数据库,以满足您对资源独享、物理安全、行业监管等需求;购买独享集群后,您可以在其上灵活创建多种自定义规格的云数据库。具有云资源独享、支持资源超分配等特点。用户既享受到云数据库服务的灵活特性,又可以满足企业对数据库合规性、安全性和高性能的要求。

    相关资讯

    热门标签

    扫码关注腾讯云开发者

    领取腾讯云代金券