Daily Record

栏目: C · 发布时间: 5年前

内容简介:其实C语言是维护了一个数据结构类似如下的结构,这个结构中主要有两个数据:一个是当前内存块的大小,另外一个是指向下一个空闲内存块:其实我们在
  1. 结构体初始化后需要进行清空
    struct mg_send_mqtt_handshake_opts opts;
    memset(&opts, 0, sizeof(opts));
    

2018.03.28

  1. 宏定义与函数名冲突,若宏定义在函数名的声明或定义之前,则会进行字符串替换,导致编译会报错
  2. MQTT QOS 学习
    qos 0: 最多分发一次,消息可能送达一次也可能根本没送达,取决于底层的网络能力,接收者不会响应,发送者不会重发
    
    qos 1: 至少分发一次,服务质量确保消息至少送达一次,需要PUBACK报文确认
    
    qos 2: 仅分发一次,最高等级的服务质量,消息丢失和重复都是不可接受的
    

2018.05.29

  1. 布尔值变量的命名尽量使用如下规则: is_xxx
  2. lua 字符串拼接操作:若存在大量的字符串拼接操作,如循环等,不要使用 .. ,因为每次都会申请临时内存,新建一个新的字符串,会导致内存来不及回收,可以使用 table.insert + table.contact
  3. sscanf 可以进行字符串分割和字符串数字转数字等,很强大!!!

2018.07.19

  1. 两个库有相同的符号,同时链接的话,运行时可能串库调用

2018.08.17

  1. 越界访问内存导致 free 失败的原因

molloc 一块内存,在 free 的时候只需要传递指针首地址操作系统(或者说C语言)就可以对内存进行释放,那么它是怎么知道应该释放多大的内存呢?

其实 C语言 是维护了一个数据结构类似如下的结构,这个结构中主要有两个数据:一个是当前内存块的大小,另外一个是指向下一个空闲内存块:

typedef struct Header {
        union header *ptr; /*next block if on free list*/
        unsigned size; /*size of this block*/
    } header;

其实我们在 molloc(10) 一块内存的时候,真正申请的不止是 10 个字节大小的内存,而是要加上一个 struct Header 结构体的大小, molloc 返回给我们的内存想当于是p+sizeof(Header)的指针,而在free的时候,则C语言只需要将 p-sizeof(Header) 就能找到 header 结构,从而知道内存块大小。

2018.10.16

  1. 使用 valgrind 对可执行程序做内存检查,发现会存在 still reachable 的问题,可排除编码的问题。
    valgrind --tool=memcheck --leak-check=yes --show-reachable=yes --track-origins=yes a.out
    

查阅资料发现,许多 C++ 库都实现了自己的内存分配管理器,在内存释放时不是将其直接还给系统,而是留在内存池中供下次使用,这导致程序退出时会被检测到 still reachable 。将使用 C++ 库的地方去除再次验证,无该错误。

参考: https://stackoverflow.com/questions/30376601/valgrind-memory-still-reachable-with-trivial-program-using-iostream


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

编写高质量代码

编写高质量代码

秦小波 / 机械工业出版社华章公司 / 2011-12-28 / 59.00元

在通往“Java技术殿堂”的路上,本书将为你指点迷津!内容全部由Java编码的最佳实践组成,从语法、程序设计和架构、工具和框架、编码风格和编程思想等五大方面对Java程序员遇到的各种棘手的疑难问题给出了经验性的解决方案,为Java程序员如何编写高质量的Java代码提出了151条极为宝贵的建议。对于每一个问题,不仅以建议的方式从正反两面给出了被实践证明为十分优秀的解决方案和非常糟糕的解决方案,而且还......一起来看看 《编写高质量代码》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具