
Developer Quality
文章平均质量分 63
wowRicky
其实我是代码滴搬用工;
C4 Picasso, my favorite car.
展开
-
写一个内存越界访问的程序
内存越界 address sanitizer原创 2024-07-12 14:57:21 · 940 阅读 · 0 评论 -
一个不完全编译导致的奇怪问题
分析到这里,你应该明白问题所在了吧,就是a.h修改后,a.c没有重新编译生成a.o, a.out可执行文件link的仍然是初始代码的a.o.gdb 调试,发现a_t结构体的大小再main.c 和 a.c中的size 不一致,一个是12bytes, 一个是8bytes.编译运行,生成a.o, a.out, 运行a.out 输出: 1-2。输入如下:1-2-0,是不是感觉很奇怪, 我们期望的是1-2-3。删除a.o, 重新编译,问题解决。原创 2024-07-12 17:58:57 · 211 阅读 · 0 评论 -
c语言link
a.o 依赖于libmm.a, 也就是说a.o 调用了libmm.a中的函数,今天在编码时,发现用第2种方式,链接时会报错,提示符号A没有定义, 但是符号 A 确定在libmmm.a中有定义。尝试第1种方式,编译成功。中找不到的符号的情况下,再链接。当链接时存在依赖关系时,将。中的符号时,已经知道去。原创 2023-12-22 21:02:38 · 276 阅读 · 0 评论 -
分布式编译distcc
工程代码编译速度太慢,决定采用分布式编译来提高编译速度.distcc ,请参考。原创 2023-12-20 16:20:19 · 1500 阅读 · 0 评论 -
valgrind-callgrind分析程序性能
valgrind callgrind原创 2022-08-27 10:00:01 · 441 阅读 · 0 评论 -
C面向对象之透明指针的运用
不透明指针(opaque pointer)可以用来在C中实现封装。什么是不透明指针(opaque pointer)从字面意思来看,“不透明”意味着看不到内部,因此“不透明指针”即看不到内部定义的指针。这样说有些抽象,我们来看个例子:#include <stdio.h>typedef void *opque_data;typedef struct AAA *opque_stru;int main(){ opque_data data = 0; opque_s原创 2021-07-12 09:41:15 · 949 阅读 · 0 评论 -
malloc(0)-malloc 0 字节
C17中有如下描述:7.22.3 Memory management functions1 The order and contiguity of storage allocated by successive calls to the aligned_alloc, calloc,malloc, and realloc functions is unspecified. The pointer returned if the allocation succeeds issuitably align原创 2021-07-08 14:44:09 · 504 阅读 · 0 评论 -
双重指针作为函数参数的妙用
指针加加#include <stdio.h>#include <stdlib.h>#include <string.h>void setDataCond(int *p, unsigned int condi){ if (condi % 2) { *p = condi * 10; p++; }}void setDataCond_1(int **pp, unsigned int condi){ if (condi % 2) { *原创 2021-06-27 11:40:54 · 2213 阅读 · 0 评论 -
malloc为什么会报错:memory corruption
最近遇到一个问题,很有意思,在此记录下,以备后续参考。程序运行异常,报错:malloc: memory corruption.用gdb调试程序,bt如下,程序在申请344 bytes内存时失败。疑问:344bytes内存并不大,为何会失败呢?进一步,打开AddressSanitizer,重选编译并运行程序,AddressSanitizer报错如下,报错内容分3部分贴出如下(信息安全,隐藏掉部分堆栈信息):1.重点:红色字体:heap-buffer-overflow on a...原创 2021-04-18 11:47:00 · 7559 阅读 · 0 评论 -
GDB调试技巧
1. GDB 调试程序1.Run a program without any argument. gdb program2. Run a program with arguments gdb --args program arg1 arg2 ... argN or gdb program (gdb) r arg1 arg2 ... argN3. start with both an executable program and a c...原创 2020-11-20 15:28:23 · 1238 阅读 · 0 评论 -
一种内存池管理技术
本文介绍一种内存池管理技术。在m公司工作了4年多,一直负责内存池模块问题的处理,比如内存越界,data abort 系统异常的处理,本文加以总结,以便后续参考。读本文之前,先有个约定,本文中提到的pool指的就是内存池,buffer就是内存池中的一个存储单元,一个pool包含多个buffer。1. 内存池整体规划首先介绍下内存池的布局,pool共12个,pool[0]包含930个buffe...原创 2018-10-20 23:29:14 · 740 阅读 · 0 评论 -
C++ 和C 语言混合代码导致的问题
C语言中操作字符串用C运行时函数:strtok, strcmp, strcpy等等,直接操作内存。在c++引入的字符串操作类std:string ,string类中必有一个私有成员,其是一个char*,用户记录从堆上分配内存的地址,其在构造时分配内存,在析构时释放内存。因为是从堆上分配内存,所以string类在维护这块内存上是格外小心的,string类在返回这块内存地址时,只返回const cha原创 2012-10-09 16:35:14 · 1297 阅读 · 0 评论 -
正则表达式分类 区别
原文地址:http://www.cnblogs.com/chengmo/archive/2010/10/10/1847287.html正则表达式:在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内转载 2012-07-27 11:13:22 · 762 阅读 · 0 评论 -
常见主机字节序
常见主机字节序 1. Little endian:将低序字节存储在起始地址 2. Big endian:将高序字节存储在起始地址 LE little-endian 最符合人的思维的字节序 地址低位存储值的低位 地址高位存储值的高位 怎么讲是最符合人的思维的字节序,是因为从人的第一观感来说 低位值小,就应该放在内存地址小的地方,也即内存地址低位转载 2012-07-18 15:51:23 · 643 阅读 · 0 评论 -
byte endian(big&little endian)
1. 大小端的区别little endian:把低位字节存放在内存的低位; // big endian: 将低位字节存放在内存的高位;比如:0x1234,则12 就属于高位字节;34 属于低位字节假如从地址0x0000 0000开始的一个字节中保存数据0x12345678, 这2中字节序在内存当中存放顺序为:address: 0x0000 0000 0x00原创 2009-08-05 23:11:00 · 1051 阅读 · 0 评论 -
C语言编译全过程(转贴)
C语言编译全过程 编译的概念:编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。 编译的完整过程:C源程序--> 预编译处理( . c) --> 编译、优化程序(. s、. asm)--> 汇编程序( . obj、. o、. a、. ko)转载 2010-01-20 23:19:00 · 582 阅读 · 0 评论 -
OutputDebugString的用法
OutputDebugString is a API function, it is used to help programmer debug the program, which is like TRACE or afxDump, it is work with Dbgview. in Debug mode it performance as TRACE. But in Rel转载 2010-01-08 22:59:00 · 2136 阅读 · 0 评论 -
dumpbin介绍
1. SUMMARY The DUMPBIN utility, which is provided with the 32-bit version of Microsoft Visual C++, combines the abilities of the LINK, LIB, and EXEHDR utilities. The combination of these t转载 2010-03-26 23:19:00 · 1196 阅读 · 0 评论 -
VC manifest
manifest原理和用途dll是被动态调用的,所以会被若干个程序共享使用的 但是如果dll在应用程序不知道的情况下升级了、或是被另一个程序更改了,就可能会出现问题,即”DLL Hell” 随着系统资源越来越丰富,硬盘不那么紧张,所以在XP以后的操作系统中,用新的机制来管理DLL (这种机制,这不仅仅是对于.NET而言,对于普通的Native程序也是一样的) Madif转载 2010-04-12 23:19:00 · 4594 阅读 · 1 评论 -
c语言中volatile关键字的作用
读文章之前 可以先看一下《程序员的自我修养 》第28页 过度优化。volatile 提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有 volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某转载 2010-04-20 22:23:00 · 637 阅读 · 0 评论 -
Windows 和 Linux 应用程序从上到下调用层次比较
刚毕业的时候,做了将近一年的Window下的程序开发,主要用MFC,那是也不明白程序在操作系统角度从上到下的整个调用层次。遇到调用库函数,不明白,就查MSDN,每个月1500行代码左右,那是以为这就是软件开发了。后来跳槽的另外一家公司,工作也是Windows下的程序开发,这是可以用到多线程、COM组件,还能用到涉及模式,那是高兴的不得了。记得刚开始用到多线程,就买了一本书《WIN32多线程程序设计》,边学边用.创建线程有几种方法:1. WINAPI: CreateThread();2. CRT原创 2010-12-20 23:01:00 · 3739 阅读 · 2 评论 -
c语言实现memcpy
今天到I公司去面试,面试方式比较特殊,没有笔试,就是2个面试官,一人一句轮番发问,涉及面很广,涉及到操作系统(MMU、page out、process/thread、semaphore、interrupt), OOP(多态、design pattern)、数据结构(排序、二叉查找树)、计算机网络(OSI 5层)、C语言(big/small endian)、英语口语等等,问了大约一个小时左右。所有问题都是口头表述,只在纸上写了一个memcpy程序,用原创 2011-01-25 20:56:00 · 9546 阅读 · 7 评论 -
extern数组与extern指针
<br />数组名代表了存放该数组的那块内存,它是这块内存的首地址。这就说明了数组名是一个地址,而且,还是一个不可修改的常量,完整地说,就是一个地址常量。数组名跟枚举常量一样,都属于符号常量。数组名这个符号,就代表了那块内存的首地址。注意了!不是数组名这个符号的值是那块内存的首地址,而是数组名这个符号本身就代表了首地址这个地址值,它就是这个地址。这就是数组名属于符号常量的意义所在。由于数组名是一种符号常量,它是一个右值,而指针,作为变量,却是一个左值,一个右值永远都不是左值,那么转载 2011-02-14 22:30:00 · 845 阅读 · 0 评论 -
两个类相互包含引用的问题--类前向声明
在构造自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类A类B,A中使用了B定义的类型,B中也使用了A定义的类型class A{ int i; B b;}class B{ int i; A* a;}请注意上面的定义内容,一般情况下是不能出现类A,类B相互引用都定义对象,即如下的样子:class A{int转载 2011-11-18 18:12:49 · 3153 阅读 · 1 评论 -
c 语言实现strcasecmp
#define __tolower(c) ((('A' int strcasecmp(const char *s1, const char *s2){ const unsigned char *p1 = (const unsigned char *) s1; const unsigned char *p2 = (const unsigned char *) s原创 2011-12-29 17:44:16 · 3248 阅读 · 3 评论 -
C++标准库中sstream和strstream的区别
在C++有两种字符串流,一种在sstream中定义,另一种在strstream中定义。它们实现的东西基本一样。strstream里包含class strstreambuf;class istrstream;class ostrstream;class strstream;它们是基于C类型字符串char*编写的sstream中包含class istri转载 2012-02-08 10:43:19 · 922 阅读 · 0 评论 -
防止产生内存碎片
Preventing Memory FragmentationApplications that are free from memory leaks but perform dynamic memory allocation and deallocation frequently tend to show gradual performance degradation if they a转载 2012-05-31 16:51:18 · 731 阅读 · 0 评论 -
big endian & little endian
大端(big-endian)和小端(little-endian)2007-12-07 20:36补:x86机是小端(修改分区表时要注意),单片机一般为大端 今天碰一个关于字节顺序的问题,虽然看起来很简单,但一直都没怎么完全明白这个东西,索性就找了下资料,把它弄清楚. 因为现行的计算机都是以八位一个字节为存储单位,那么一个16位的整数,也就是C语言中的shor转载 2009-08-05 23:02:00 · 696 阅读 · 1 评论