• 阿里面试


    一 内存泄漏

    1 C++内存泄漏

    在C程序中使用malloc()分配内存,使用free()来释放内存,当未释放不再使用的内存时就会出现“内存泄漏”

    在C++程序中使用new()分配内存,使用delete()释放内存,当未释放不再使用的内存时就会出现“内存泄漏”

    2 避免内存泄漏

    每次调用malloc分配内存时,注意在以后要调用想要的free来释放它。

    3 检测内存泄漏

    内存泄漏的症状就是罪魁进程的速度会减慢。原因是体积大的进程更有可能被系统换出,让别的进程运行,而且大的进程在换入换出时花费的时间也更多。

    观察内存泄漏是一个两步骤的过程。首先,使用swap命令观察还有多少可用的交换空间,过一两分钟键入该命令两到三次,看看可用的交换区是否在减少。还可以使用其他一些工具入netstat、vmstat等。第二个步骤是确定可疑的进程,看看它是不是该为内存泄漏负责,你可能已经知道哪个进程是罪魁祸首,不然可以使用ps -lu 用户名命令来显示所有进程的大小。

    二、什么是大端和小端

            Big-Endian和Little-Endian的定义如下:
    1) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
    2) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
    举一个例子,比如数字0x12 34 56 78在内存中的表示形式为:

    1)大端模式:

    低地址 -----------------> 高地址
    0x12  |  0x34  |  0x56  |  0x78

    2)小端模式:

    低地址 ------------------> 高地址
    0x78  |  0x56  |  0x34  |  0x12

    可见,大端模式和字符串的存储模式类似。

    3)下面是两个具体例子:

    16bit宽的数0x1234在Little-endian模式(以及Big-endian模式)CPU内存中的存放方式(假设从地址0x4000开始存放)为:
     
    内存地址 小端模式存放内容 大端模式存放内容
    0x4000 0x34 0x12
    0x4001 0x12 0x34

    32bit宽的数0x12345678在Little-endian模式以及Big-endian模式)CPU内存中的存放方式(假设从地址0x4000开始存放)为:

    内存地址 小端模式存放内容 大端模式存放内容
    0x4000 0x78 0x12
    0x4001 0x56 0x34
    0x4002 0x34 0x56
    0x4003 0x12 0x78
     

     4)大端小端没有谁优谁劣,各自优势便是对方劣势:

    小端模式 :强制转换数据不需要调整字节内容,1、2、4字节的存储方式一样。
    大端模式 :符号位的判定固定为第一个字节,容易判断正负。

  • 相关阅读:
    用django搭建自己的博客
    python模块调用
    python常用函数
    ubuntu不能访问windows中的文件
    更改ubuntu下mysql的密码
    重拾代码,加油
    java 接收 char字符型
    Git基础
    flask中'bool' object has no attribute '__call__'问题
    基于python的flask的应用实例注意事项
  • 原文地址:https://www.cnblogs.com/wuchanming/p/4314379.html
Copyright © 2020-2023  润新知