- 博客(29)
- 资源 (19)
- 收藏
- 关注
原创 限制内存对齐的 #pragma pack(1)
最近遇到一个结构体, 我拷贝出来, sizeof计算了一下, 发现是104, 但实际数字节数, 发现是95, 而且官方文档也介绍是95, 奇怪了。 原来, 数字节是95, 官方文档对应的实现加了#pragma pack(1), 限制内存对齐, 随意此时计算的sizeof也是95, 而我单独拷贝结构体出来, 没有拷贝#pragma pack(1), 所以就自然不是95咯。
2016-10-31 07:47:56 7827 1
原创 平时积累的重要性
为什么要积累?大话扯多了没有意思, 说说小话吧。 晚上11点的时候, 同事反馈一个问题, 外网有几个用户投诉了, 要赶紧看看。 看了一下, 是个概率行问题。 根据现有流水和log, 有一个地方需要确认, 貌似只能看代码了? 而我是不太喜欢这么做的, 鉴于代码只是本地操作, 那就拷贝出来测试吧。 但是, 其中会用到我之前写的一个函数:void unixTime2Str(int
2016-10-31 07:41:22 9622 1
原创 搬家送书咯!
大学毕业的时候, 送了所有电子电路的书, 转战通信。 研究生毕业的时候, 送了所有的通信系统的书, 转战嵌入式。 从前东家裸辞的时候, 送了所有嵌入式的书, 转战互联网。 最近搬家, 打算送掉所有与Windows相关的书和其他的一些书, 哈哈 不过, 如下的书, 我还是要自己带走的, 等我掌握得...
2016-10-23 22:45:01 9277 20
原创 用实例程序再聊makefile指定头文件和库出错的那点破事
在文章http://blog.csdn.net/stpeace/article/details/50985578中, 我说过makefile指定头文件和库文件出错的那点破事, 今天破事重提, 用实际例子来聊一下.taoge@localhost Desktop> cat basic_add.cint basic_add(int x, int y){ return x + y;}ta
2016-10-21 22:38:40 7870 1
原创 linux中的显式运行时链接---dlopen、dlsym、dlerror、dlclose搞起
之前, 我们在linux下制作过动态库, 并卖过。 当时我们采用的是隐式链接, 也就是说, 在代码中, 我们不用去管如何打开动态库、如何链接(这些活都交给了链接器), 只需要管如何调用就行。 隐式链接的动态库被进程加载到内存后, 就一直站着这个坑, 直到进程终结。 费时费力, 浪费地盘, 而且不灵活。 于是, 一种动态加载(程序中指定加载)的方式就出现了, 这就是我们...
2016-10-21 21:54:36 8053 1
原创 为什么一些linux基础静态库(如libc.a)里面包含那么多目标文件.o呢? 为什么不将这些.o文件进行提前糅合呢?
我们来看个现象:taoge@localhost Desktop> ar -vt /usr/lib/libc.a | grep printf.orw-r--r-- 399/399 28564 Oct 26 00:26 2010 vfprintf.orw-r--r-- 399/399 988 Oct 26 00:26 2010 vprintf.orw-r--r-- 399/399
2016-10-21 19:58:30 10570 5
原创 a.out/libTest.so静态链接了libme.a, 为什么存在于libme.a中的符号没有在a.out/libTest.so中出现?
我们来看这样一个问题:a.out/libTest.so静态链接了libme.a, 为什么存在于libme.a中的符号没有在a.out/libTest.so中出现? 为了方便讨论, 我们只说a.out和libme.a. 我们知道, 静态库完全等价于目标文件(它们可逆), 当然, 这里很可能是众多目标文件.o . 而可执行文件a.out在链接libme.a时, 首先会对libme.
2016-10-21 19:45:02 7478 1
原创 两例栈溢出导致的core dump
main.cpp:#include #include using namespace std;int main(){ unsigned int m = (1<<31); string s(m, 'a'); string s1(m, 'a'); string s2(m, 'a'); return 0;} main.c:#include int mai
2016-10-21 17:49:29 8299
原创 linux中的objdump命令(反汇编常用)
我们介绍过linux中的readelf命令, 但迟迟没有介绍objdump命令, 因为其实后者可以看作是前者的子集, 我们来看看官方文档怎么说:/* The difference between readelf and objdump: Both programs are capable of displaying the contents of ELF format ...
2016-10-21 16:43:29 15879 3
原创 简要介绍一下UTF-8编码和GBK编码------并利用linux中的iconv命令来实现UTF-8和GBK之间的相互转换
曾经的某个版本一发布, 外网一片乱码, 虽然最后影响不是很大, 但至今仍然记忆犹新, 这就是我们今天要说的UTF-8编码和GBK编码, 不容忽视哦! 在涉及编码格式时, 强烈建议使用UTF-8, 更具有普遍性和通用性。 对于一个汉字而言, UTF-8是三个字节, 而GBK是两个字节。 我们来看看UTF-8编码, “我”的16进制是:E68891 (从UltraEdit中可看), 我们从在线工具上查查:http://www.mytju.com/classcode/tools/en
2016-10-21 14:42:40 18108 1
原创 简要介绍一下Dos/Windows格式文件和Unix/Linux格式文件
我曾经在这里踩过坑, 也曾在博文中聊过Dos/Windows格式文件和Unix/Linux格式文件。 最近刚好在写文件格式的专题博文, 所以再次唠叨一次。 请参考之前的博文: http://blog.csdn.net/stpeace/article/details/45767245 《 彻底解读剪不断理还乱的\r\n和\n, 以Windows和Linux
2016-10-21 11:52:57 9465
原创 简要介绍一下utf-8下bom文件的本质、bom文件的查找(linux命令)、去bom头的方法(linux命令)
之前玩php程序的时候, 出了一个问题, 但肉眼就是看不出来, 百思不得其解。 我明明没有改动自己的php文件啊, 怎么就突然有bug了呢? 后来请教某哥, 他先查了当前php文件的格式, 怀疑是bom问题, 但当前文件是没有bom头的啊, 于是怀疑是基础的php中加入了bom头, 导致当前php有问题了, 后来果真如此, 厉害! 我在旁边看得一脸懵逼, 什么bom? 听都没听
2016-10-21 11:03:57 10858 2
原创 linux中一切皆文件, 一切文件皆二进制
刚开始接触linux的时候, 看到过这样一句话:linux中一切皆文件。 当理解深刻后, 发现确实如此。 又记得当年学习C语言的时候, 看到书上介绍文本文件和二进制文件, 瞬间懵逼, 理解非常模糊。 后来玩h.264, 生成了一个test.264文件(深入了解了H.264的编码器和解码器), 才对二进制文件有了比较深入的了解, 无它, 唯01而已。 既然一切文件
2016-10-21 09:52:36 9522
转载 linux core文件开关、目录和名称的设置
间接转载地址:http://blog.chinaunix.net/uid-16979052-id-3431343.html 在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息)。使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行数。1.core文件的生成开关和大小限制 1)使用ulimit -c
2016-10-21 09:40:33 21274
原创 一个与map下标操作有关的编译错误(花了5分钟才找到原因)
来, 看程序:#include #include #include using namespace std;class A{public: map m_map; };void test(const A &a){ string s = a.m_map["hello"]; cout << s << endl;}int main(){ A a; a.m_map
2016-10-21 09:22:26 10797 1
原创 linux预处理、编译、汇编、链接和运行的过程
看个简单的程序(test.c):#include int main(){ printf("abc\n"); return 0;} 我们可以这样搞定编译和运行:taoge@localhost Desktop> gcc test.c taoge@localhost Desktop> ./a.out abc 可是, 你知道它经历了
2016-10-21 08:45:35 8625 1
原创 linux中的hexdump命令
之前介绍过linux下的xxd命令, 现在说hexdump, 从含义来讲, 就是把文件中的hex dump出来, 类似的有objdump, tcpdump, 我们来看看hexdump, 如下:taoge@localhost Desktop> xxd test.cpp0000000: 766f 6964 2066 756e 2829 0a7b 0a09 696e void fun().
2016-10-20 23:51:43 9199
原创 linux中的ELF文件有哪几类?(注意:静态库不是ELF文件)
ELF = executable linkable format 可执行、链接格式 linux中的中ELF文件主要包括四类, 也即: 1. a.out 2. core 3. so文件 4. .o文件 上述1.2是可执行文件, 3和4是可链接文件, 所以1.2.3.4统称为可执行、链接
2016-10-19 23:34:00 9212 1
原创 linux的ar命令: 目标文件(.o)<===> 静态库(.a)
在之前的博文中, 我们说过静态库的制作和使用方法, 今天, 我们再来说说静态库中到底有什么。 我们已经很熟悉linux中的tar命令了, 英文原文是tape archive, 磁带归档。 今天, 我们要说的是ar命令, 也就是archive, 也是归档。 其实, 对目标文件.o进行归档, 就形成了静态库.a文件。实际上, ar命令可以对一个或者多个目标文件.o进行归档...
2016-10-19 23:12:55 17101 4
转载 天道不一定酬勤,深度思考比勤奋工作更重要
转载地址:http://www.kaoder.com/?m=thread&a=view&fid=53&tid=258264晨兴资本刘芹:天道不一定酬勤,深度思考比勤奋工作更重要Heystacy 首推于 11月02日 05:38浏览(25224)|回应(0)2011年7月小米获得4100万美元A轮投资,晨兴
2016-10-16 23:36:59 8124
原创 来来来, 考个问题:在调试某个函数的代码时, 如何快速获知每个变量的值?
来来来, 考个问题:在调试某个函数的代码时, 如何快速获知每个变量的值? 千万别说加log, 那可要累死了, 也不要说单步调试哈, 麻烦! 那该怎么搞呢? 主动core吧。
2016-10-15 23:38:30 7246 3
原创 编译错误导致浪费10多分钟, 编译错误的提示:xxx does not name a type xxx
最近, 我在google protobuf 协议文件xxx.pb增加了结构体(类)请求字段, 生成xxx.h和xxx.cpp文件, 然后放到对应目录进行编译, 奇葩的是, 编译出错, 提示:... does not name a type ..., 实际就是在名空间中没有找到类。查了至少10多分钟才找到原因。
2016-10-15 23:08:44 25669 6
原创 访问长度为0的vector引起的低概率coredump问题的定位
最近发布版本后, 发现了一个低概率的core dump告警, 其实, 在互联网千万甚至上亿的请求下, 再低概率的core都能被频繁触发, 所以也算不上低概率, 每隔几分钟就有core, 那就展开定位吧。 首先基本可以肯定的是, core是由本次代码修改引起的。 先来做做前戏准备动作: 1. 确保core文件是完成的, 没有被截断的 2.
2016-10-15 00:59:13 8185 4
原创 一个与stl有关的概率coredump问题的定位
昨晚快下班的时候, 同学X说自己的代码有core, 而且还是概率的, 不太好搞定, W哥对此很感兴趣, 于是就展开定位。 我觉得这是个好的学习机会, 于是就在旁观背景:SVN库上的代码没有问题, 同学X加了代码后, 就有这个概率core了, 我们顺着W哥的思路来定位core.1. 直接上阵, gdb分析core, 没发现比较直观的线索。 2. 怀疑是编译
2016-10-15 00:21:40 7662 3
原创 修改.cpp后, 重新make all, 却提示nothing to be done for all
有时候, 如果makefile没有写好, 那么当修改啦.cpp后, 重新make all, 会提示nothing to be done for all, 此时怎么办呢? 如果蛮力make clean再make all, 那显然是费力不讨好了, 需要耗费太长的时间, 那怎么办呢? 我的常用方法是: 删除中间文件或者删除最后目的文件。 靠谱。
2016-10-11 23:36:44 9641
原创 基础库变更, 对应业务库make all时对变化无感知
我们知道, 当基础库变更后, 需要重新编译业务库, 重编的时候, 经常出现提示:nothing to be done for all, 也就是说, 业务库无感知了。 怎么办呢? 那就先make clean一下吧, 再make all
2016-10-11 23:30:44 7030 1
原创 linux scp命令的使用
最近远程vpn办公, 用sz/rz 传文件, 等得花儿也谢了。 还是用linux scp搞起吧: 本地到远端: scp -r local_file remote_username@remote_ip:remote_folder 远端到本地: scp -r remote_username@remote_ip:
2016-10-10 23:40:15 7110
原创 makefile同时指定多个同名头文件/库文件, 那实际到底采用的是哪个呢?
虽然是10月8号了, 但仍然处在休假中, 这种感觉不错。 为了避免节后综合征导致上班没精神, 所以今天就开始在家玩玩代码, 提前进入工作状态。 今天, 我们来看看这样一个问题:makefile同时指定多个同名头文件或库文件, 那实际到底采用的是哪个呢? 我们先说头文件。 在实际开发中, 一些公共的头文件, 经常被到处拷贝, 这是常有的事
2016-10-08 12:47:41 11511 2
linux protobuf安装文件
2016-11-04
linux tree命令的源码
2015-11-01
编译好的openssl库和头文件
2014-12-14
入门数据库sqlite3的最佳实践资料
2014-08-12
在Windows下学习Linux命令
2013-08-08
音频处理软件Gold Wave
2013-07-17
H.264visa软件
2013-07-13
YUVviewer :原始的YUV视频的播放器
2013-06-24
经典的C语言编译器:TC2.0
2013-06-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人