虚拟内存探究 -- 第一篇:C strings & /proc
一、实验环境 二、预备知识 三、虚拟内存 四、剖析一个简单的C程序 strdup 进程的虚拟内存空间多大 proc文件系统 mem文件 maps文件 pid 五、替换进程的字符串 /proc探究 ...
一、实验环境 二、预备知识 三、虚拟内存 四、剖析一个简单的C程序 strdup 进程的虚拟内存空间多大 proc文件系统 mem文件 maps文件 pid 五、替换进程的字符串 /proc探究 ...
本文简要介绍左移导致的溢出问题。 实际项目中需要计算SD卡中某个目录的大小,并判断该目录所占空间是否超过SD卡总容量的一半。 测试过程中经常发现误报,该目录所占空间远小于SD卡容量一半的时候,就上报占用空间过半的事件。 排查发现原来是计算的时候移位导致了溢出。问题代码如下: unsigned int total_space_in_mb; unsigned long long used_s...
不怕不知道,就怕不知道自己不知道。 设备A(发送方)和设备B(接收方)通过串口通讯,如下图所示,使用COBS进行编解码主要是为了报文分割(解决粘包半包问题)。 开发和测试期间,A和B之间通信均正常。等到A设备批量生产的时候,极个别A设备和B无法正常通信。 第一反应是A和B的COBS编解码库(A和B由不同公司开发)会不会有问题,比如发送方编码错误或者接收方解码错误。于是把A编码后的报...
通过mongoose下载文件的时候,概率出现下载文件不完整的情况。 软件交互流程如下: 浏览器 <----HTTP连接----> web服务器mongoose <----本地TCP连接---->cgi进程 抓包发现,问题出现的时候,cgi进程发送给mongoose的文件就是不完整的。但是通过strace命令看,cgi进程是读完了整个文件并且都通过系统接口se...
代码编译的时候,编译服务器莫名其妙的报以下错误: fatal error: error writing to /tmp/ccGjoKTF.s:No space left on device 奇怪了,编译脚本中并没有往tmp目录写文件呀! 仔细看了下错误信息,这个ccGjoKTF.s应该是编译过程的中间文件,文件名是随机值。 然而makefile中并未要求保留汇编代码。 写了个de...
本文主要介绍arm平台curl交叉编译方法。 基于curl + openssl + zlib 的方式组建arm上的https客户端,其中curl作为http客户端,openssl提供https支持,zlib负责处理gzip压缩的http报文。 编译目录结构如下: curl-7.29.0、openssl-OpenSSL_1_0_2g和zlib-1.2.8是待编译的源码 libs用...
本文记录我读过的书,并根据个人体验进行了粗略的等级划分。 等级划分具有很大的主观性,仅供参考。 相关书目维护在xmind文档中,不定期更新:《我读过的书》 =========================================================================== 下面是之前发现的一些不错的技术书籍,可通过链接下载电子版。后续不再更新。 ...
本文简要介绍基于Nginx反向代理,建立Google镜像的步骤。 1. 准备一个可以访问google的服务器 可以考虑申请一个访问google不受限的云服务器,比如亚马逊。 2. 下载源码 wget https://codeload.github.com/openssl/openssl/zip/OpenSSL_1_1_0e -O OpenSSL_1_1_0e.zip wget ft...
本文介绍如何去掉宏__FILE__的路径,只显示文件名。 宏__FILE__展开后会带有路径信息,比如下面的代码: #include<stdio.h> #include<stdlib.h> int main() { printf("file_name:%s\n", __FILE__); return 0; } 如果Makefile内容如下: CFALG...
实际项目中发现Json-C用法不当导致的内存泄露、踩内存问题,大都是因为不清楚下面几个接口的用法。 以下分析基于https://github.com/json-c/json-c( 0.12.1 release)。 1. json_object_new_object生成的对象要不要释放 int main(int argc, char **argv) { struct json_object...