
C
文章平均质量分 56
黄波hb
这个作者很懒,什么都没留下…
展开
-
c语言编译、链接过程
c语言的编译链接过程:把c程序(源代码)转换成可以在机器上运行的程序(可执行代码)。需要进行编译和链接的过程。编译:把c程序(源代码)转换成机器语言形式的目标文件 1 编译:主要包含两个过程 1 预处理:宏定义、文件包含、条件编译。在正式开始编译之前根据预处理命令来修改源文件的内容 2 编译、优化:通过词法分析和语法分析将指令翻译成原创 2012-09-06 09:58:34 · 751 阅读 · 0 评论 -
关于宏的副作用
#define min_i(a,b) ((a)int main(){ int a =10; int b =20; printf("min_i(a++, b++) = %d\n", min_i(a++, b++)); //11 printf("a =%d\n",a); // 12 printf("b =%d原创 2012-09-06 09:58:40 · 579 阅读 · 0 评论 -
你该明白的
1 x86小端模式下int a = 0x123456;char *p = &a;*(p+1) 的值0x34,因为p指向的是变量a内存单元最小地址处,char型指针指向的是一个字节的空间所以char型指针+1移动8位,int型指针指向的是4个字节的空间所以int型指针+1移动32位。2 x86小端模式下 (str指向的是数组内存单元最小地址处) char str[] ="12原创 2012-09-06 09:58:51 · 716 阅读 · 0 评论 -
c语言程序内存分配
一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)—程序运行时由编译器自动分配,存放函数的参数值,函数返回值,局部变量的值等。其操作方式类似于数据结构中的栈。程序结束时由编译器自动释放。2、堆区(heap) —在内存开辟另一块存储区域。一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事。3、静态区(static)—编原创 2012-09-06 09:58:36 · 786 阅读 · 0 评论 -
关于free
假设用malloc()申请了一块内存后,要用free()去释放这块内存,把这快内存交给堆去管理,以便分配给其他要使用内存的地方。free并没有把内存里的值清0,内存里的值仍保持原样。free之后仍然可以通过你的指针去访问内存。分配内存步骤:1、申明一个指定类型的指针2、计算要分配内存大小(sizeof())3、分配内存(malloc()),返回值赋给指针变量4、检查返回值是原创 2012-09-06 09:58:12 · 658 阅读 · 0 评论 -
typedef用法
不管是在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中。typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了。用途一:定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针和一个字符变量;原创 2012-09-06 09:58:06 · 414 阅读 · 0 评论 -
字节序
区分:高低地址,高低字节一、字节序定义字节序,顾名思义字节的顺序,就是大于一个字节类型的数据在内存中的存放顺序(一个字节的数据当然就无需谈顺序的问题了)。其实大部分人在实际的开发中都很少会直接和字节序打交道。唯有在跨平台以及网络程序中字节序才是一个应该被考虑的问题。Big-Endian和Little-Endian。引用标准的Big-Endian和Little-Endian的定义如下:原创 2012-09-06 09:58:19 · 549 阅读 · 0 评论 -
malloc()实现原理2
C语言的malloc分配的的内存大小没读过malloc()的源码,所以这里纯粹是"理论研究"。malloc()在运行期动态分配分配内存,free()释放由其分配的内存。malloc()在分配用户传入的大小的时候,还分配的一个相关的用于管理的额外内存,不过,用户是看不到的。所以,实际的大小 = 管理空间+用户空间 那么,这个管理内存放在什么位置呢,它要让free()原创 2012-09-06 09:58:17 · 593 阅读 · 0 评论 -
memset了解
1。void *memset(void *s,int c,size_tn)总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。2.memset()的深刻内涵:用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘’或‘/0’;例:char a[100];memset(a, '/0', sizeof(a));3.memset可以方便的清空一个结构类型的变量原创 2012-09-06 09:57:59 · 494 阅读 · 0 评论 -
sprintf()
printf() 格式化输出函数(图形)功能: 函数sprintf()用来作格式化的输出。用法: 此函数调用方式为int sprintf(char *string,char *format,arg_list);说明: 函数sprintf()的用法和printf()函数一样,只是sprintf()函数给出第一个参数string(一般为字符数组),然后再调用outtextxy()函数将串里原创 2012-09-06 09:58:21 · 1242 阅读 · 0 评论 -
关键字的总结
一、关键字volatile编译器的优化:因为访问寄存器要比访问内存要快的多所以编译器一般都会减少存取内存的的优化,将内存变量缓存到寄存器。使用关键字volatile声明变量的时候,表示变量随时可以改变,系统总是重新从他所在的内存读取数据,也可以这么理解当使用关键字volatile时编译器就不在对该变量进行优化。1) 并行设备的硬件寄存器(如:状态寄存器)假设需要对寄存器依次初始化为不同原创 2012-09-06 09:58:42 · 372 阅读 · 0 评论 -
关键字sizeof()和函数strlen()
关键字sizeof()用来计算变量或者类型所占的内存大小。函数strlen()用来计算字符串的长度(只能用char*做参数)。char str[20] = "helloworld";--------->sizeof(str)的值是20 strlen(str)的值是10char str[] = "helloworld"; ---------->sizeof(str)的值是11 str原创 2012-09-06 09:58:38 · 498 阅读 · 0 评论 -
联合体、结构体的一些整理
联合体:采用Little-endian模式的CPU对操作数的存放方 式是从低字节到高字节,而Big-endian模式对操作数的存放方式是从高字节到低字节。例如,16bit宽的数0x1234在Little- endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:内存地址 存放内容 0x4000 0x34 0x4001 0x12 而在Big-endian模原创 2012-09-06 09:58:44 · 418 阅读 · 0 评论