Daily Record

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

内容简介:其实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


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

查看所有标签

猜你喜欢:

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

概率

概率

[俄]施利亚耶夫 / 周概容 / 高等教育出版社 / 2008-1 / 48.00元

《概率(第2卷)(修订和补充第3版)》是俄国著名数学家A.H.施利亚耶夫的力作。施利亚耶夫是现代概率论奠基人、前苏联科学院院士、著名数学家A.H.柯尔莫戈洛夫的学生,在概率统计界和金融数学界影响极大。《概率(第2卷)(修订和补充第3版)》作为莫斯科大学最为出色的概率教材之一。分为一、二两卷,并配有习题集。第二卷《概率(第2卷)(修订和补充第3版)》是离散时间随机过程(随机序列)的内容。重点讲述(强......一起来看看 《概率》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

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

RGB CMYK 互转工具