首页 > 其他 > 详细

test

时间:2019-04-02 19:47:57      阅读:147      评论:0      收藏:0      [点我收藏+]
  • 指针和引用的区别
    1.建立一个变量或类的指针需要开辟新的内存,而引用不需要。
    2.引用必须需要初始化,而指针不一定,但是指针最好初始化(不初始化),不要会变成野指针,误用野指针,会有严重的后果。
    3.指针会被重新赋值,引用总是指向最初的对象。
    4.sizeof(引用)是指向变量的大小,sizeof(指针)是指针本身指向的变量的大小。
    5.自增运算意义不一样,指针自增是指向邻近的下一个元素,引用则是进行值加1的运算。

  • 堆和栈的区别
    1.管理方式: 栈是由编译器自动管理,无需手工控制。在c++11之前,堆的管理需要手工控制,自己开辟新内存,自己释放。在c++11之后,有了智能指针,自己开辟内存,不用人工释放,会自动释放,这也为使用c++进行多线程编程提供了方便。
    2.空间大小: 一般来说,堆内存可以达到4GB。栈内存一般比较小,在MB这个量级,这也就造成了我们函数递归调用层数过多所导致的的堆栈溢出现象。
    3.碎片问题: 堆不停的new/delete会造成大量的碎片,导致内存不连续,是程序运行效率降低。对于栈来说,不会造成碎片的问题,因为它是先进后出的,
    4.生长方向: 堆来说,新分配的内存是延着内存增加的方向。栈来说,新分配的内存是沿着内存地址减小的方向。
    5.分配效率: 栈的效率比堆的高。

  • new和delete是如何实现的,new与malloc的异同处
    1.对于简单数据类型: new是直接调用operator new分配内存,operator new会调用malloc分配内存。delete直接调用free释放内存。
    2.对于复杂数据类型: new先调用operator new分配内存再调用构造函数,delete先调用析构函数,再调用free释放内存。
    3.对于简单数据类型: new[]和delete[]和new和delete没有区别
    4.对于复杂数据类型: new[]分配内存时会多调用4个字节写入数组大小,数组的大小为调用构造函数的次数。Delete[]会根据写入数组的大小调用析构函数的,再释放内存。

  • struct和class的区别
    1.默认的继承访问权限不同, Struct是public的,class是private的。
    2.默认的数据访问控制不同, Struct是public的,class是private的。
    3.class可以用于定义模板, struct不可以。

  • define和const的区别
    1.define在预处理阶段进行替换,const在编译时确定其值。
    2.define不分配内存,只是进行简单的替换,const会在静态存储区中分配空间。
    3.define简单的替换会导致错误。

test

原文:https://www.cnblogs.com/hesper/p/10644802.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!