Daily Record

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

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


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

查看所有标签

猜你喜欢:

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

Data Structures and Algorithms with JavaScript

Data Structures and Algorithms with JavaScript

Michael McMillan / O'Reilly Media / 2014-2-22 / USD 28.51

If you’re using JavaScript on the server-side, you need to implement classic data structures that conventional object-oriented programs (such as C# and Java) provide. This practical book shows you how......一起来看看 《Data Structures and Algorithms with JavaScript》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

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

正则表达式在线测试

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具