![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C
文章平均质量分 57
yang_chen_shi_wo
这个作者很懒,什么都没留下…
展开
-
glibc的几个有用的处理二进制位的内置函数
— Built-in Function: int __builtin_ffs (unsigned int x)Returns one plus the index of the least significant 1-bit of x, or if x is zero, returns zero.返回右起第一个‘1’的位置。— Built-in Function: int转载 2015-06-18 21:18:12 · 529 阅读 · 0 评论 -
printf char*问题
int main(){ //unsigned int a =0xFFFFFFF7; int i =1; char a[4] = {0xFF,0xFF,0xFF,0xFF}; char* p = (char*)a; printf("%02x",*p);}打印结果是int main(){ //unsigned int a =0xFFFFFFF7原创 2015-08-10 21:10:35 · 7141 阅读 · 0 评论 -
linux下检查内存泄露的工具--mtrace
原文地址:http://blog.csdn.net/sunnydogzhou/article/details/6532436最令linux程序员头疼的莫过于内存泄露了,即使你是在优秀的程序员,你也不能保证所以的malloc操作都有对应的free,那必要的工具就是必不可少的了。在一般的linux发行版中,有一个自带的工具可以很方便的替你完成这些事,这个工具就是mtrace。转载 2015-08-19 11:10:07 · 702 阅读 · 1 评论 -
gdb调试命令
原文地址:http://blog.chinaunix.net/uid-9525959-id-2001805.html本文介绍使用gdb调试程序的常用命令。 主要内容: [简介] [举例] [其他] [简介] ============= GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。如果你是在转载 2015-08-19 15:05:44 · 332 阅读 · 0 评论 -
练习
sizeof求字符串长度时包含"\0"正数的补码是他本身,负数的补码是其相应正数取反码加1。假设有一个 int 类型的数,值为5,那么,我们知道它在计算机中表示为:00000000 00000000 00000000 000001015转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。比如:00000000 00000000 00000000 00原创 2015-09-05 10:09:51 · 487 阅读 · 0 评论 -
Learning Cstring lib
11:30原创 2015-11-30 16:28:26 · 279 阅读 · 0 评论 -
关于编程语言的思考——编译型和解释型
原文地址:点击打开链接讲了一些汇编语言和高级语言之间是怎么联系的知识。转载 2015-12-06 22:20:30 · 184 阅读 · 0 评论 -
TCMalloc小记
原文地址转载 2015-12-06 17:41:08 · 251 阅读 · 0 评论 -
可移植C
•How to make sure that onlystandard C constructs are used in a program?–Using the right C compiler flags:•gcc, cc–‘-ansi’: ISOC90 programs.–‘-ansi’ +‘-pedantic’: reject non-ISO progr转载 2016-04-25 20:42:48 · 369 阅读 · 0 评论 -
makefile学习
jj原创 2016-04-11 11:46:04 · 293 阅读 · 0 评论 -
段错误与总线错误
总线错误:引起原因: 几乎总是由于对未对齐的读或写引起的。它之所以称为总线错误是因为对未对齐的内存访问时,被阻塞的组件就是地址总线。对齐(alignment)数据项只能存储在地址是数据项大小的整数倍的内存位置上,这样可以加速内存访问。如:访问一个8字节的double的数据时,地址只能是8的整数倍,所以存储一个double的地址只能是24,8008,但不能存储于地址1006因为它不能被8整除原创 2015-06-09 16:09:19 · 929 阅读 · 0 评论 -
#pragma pack,__attribute__选项和结构体对齐相关问题详解
自己编程测试时,#pragma pack(show)这个老是提示unknown action ‘show’ for ‘#pragma pack’ - ignored [-Wpragmas]程序编译器对结构的存储的特殊处理确实提高CPU存储变量的速度,但是有时候也带来了一些麻烦,我们也屏蔽掉变量默认的对齐方式,自己可以设定变量的对齐方式。编译器中提供了#pragma pack(n)来转载 2015-06-12 10:38:26 · 1511 阅读 · 1 评论 -
C语言好的编码风格
多用assert(),这样可以定位错误,方便调试注意:assert是宏,而不是函数。在C的assert.h头文件中。assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#defineassert(expr)\((expr)\?__ASSERT_VOID_CAST(0)\:__assert_fail(__STRING(expr),__FILE__,原创 2015-06-03 15:28:11 · 771 阅读 · 0 评论 -
glibc中malloc的详细解释
原文地址:http://blog.csdn.net/eroswang/article/details/4130972应用程序是从0x8048000开始,那是由linker定的,具体数值在一linker脚本定的,具 体在哪忘了,只在linux上是这样,到其它的平台上,可能就是另外一个值了,这只是个约定。0x804a008到0x8048000之间是程序 的.text,.data,.bss等内容。转载 2015-05-08 09:23:40 · 485 阅读 · 0 评论 -
内存碎片讲解
内部碎片是在一个已分配块比有效载荷大时的现象。例如,一个分配器的实现可能对已分配块强加一个最小的大小值,而这个大小要比某个请求的有效载荷大。或者分配器增加块大小以满足对齐约束条件。内部碎片的量化很简单,就是已分配块大小和他们的有效载荷之间差的和。因此,在任意时刻,内部碎片的数量只取决于以前请求的模式和分配器是实现方式。外部碎片是当空闲存储器合计起来足够满足一个分配要求,但是没有一个原创 2015-06-09 09:00:44 · 363 阅读 · 0 评论 -
c语言中字符串常量可写吗?
在C语言中,字符串是存储在常量区,可读不可写。所以一下代码会输出they are equal并且会产生段错误(因为写了不能写的)。#include int main(int argc,char *argv[]){char *p = "hahaha";char *p2 = "hahaha";if (p==p2) printf("they are equal\n");*p2 = 'j原创 2015-07-07 19:32:23 · 669 阅读 · 0 评论 -
C语言 位序 字节序 和 网络字节序 帧格式
在我们定义结构体时,从上往下,第一个成员占用这个结构体变量的最低地址。从上往下依次累加。当我们定义结构体位域时,也是这样,第一个定义的位字段,占用这个字节中的最低的位地址。最后一个占用高地址。所以说字节序和位序是统一的。但是当我们编写网络程序的时候,要注意网络字节序和位序都是大端序的,而主机很多都是小端序。所以在网络中的第一个位字段通常放在一个字节的末尾,而在网络中的最后一个字节的位字段,则放原创 2015-07-07 19:09:23 · 1784 阅读 · 0 评论 -
文件输入输出
文件的两种视图:文本和二进制。有的时候同一个文件以不同的视图进行查看,显示是不同的,主要是控制字符(回车,换行)的不同。printf()是将各种类型转换为适合的终端字符。所以打算将一个结构体送入文件的话不能用printf这一类函数。二进制形式存储,中间没有从数字到字符串形式的转化。对于标准IO,fread和fwrite函数提供了这种二进制服务。strcpy和strcat函数可以用于生成原创 2015-07-03 09:16:22 · 256 阅读 · 0 评论 -
C语言知识点总结
宏相关的技巧宏定义中使用do{}while(0)的好处http://blog.csdn.net/liliangbao/article/details/4163440#define MACRO_NAME(para) do{macro content}while(0) 的格式,总结了以下几个原因: 1,空的宏定义避免warning:转载 2015-05-31 09:47:42 · 600 阅读 · 0 评论 -
C语言头文件、库文件的查找路径
原文地址:http://blog.chinaunix.net/uid-25544300-id-3310491.html在程序设计中,文件包含是很有用的。一个大的程序可以分为多个模块,由多个程序员分别编程。有 些公 用的符号常量或宏定义等可单独组成一个文件,在其它文件的开头用包含命令包含该文件即可使用。这样,可避免在每个文件开头都去书写那些公用量,从而节省时间转载 2015-06-08 18:11:57 · 12472 阅读 · 2 评论 -
C语言 printf
Printfprintf("%s,%s,%s",jj,jj);当两者个数不匹配时,会打印出warning说最后一个%s缺少一个char*。当类型不匹配时也会打印warning说类型不匹配。输出前两个会正确,第三个无法预计。int main(){ int i = 0; int j = 9; printf("%d",i,j);}当这种情原创 2015-07-10 20:31:49 · 289 阅读 · 0 评论 -
do while(0)在宏中的使用
反斜线代表该行未结束,会串接下一行。而如果宏里有多过一个语句(statement),就需要用 do { /*...*/ } while(0) 包裹成单个语句,否则会有如下的问题:#define M() a(); b()if (cond) M();else c();/* 预处理后 */if (cond) a(); b();else /* <- els转载 2016-09-18 15:18:30 · 526 阅读 · 0 评论