存储类相关的关键字简介(含static+链接属性) auto 修饰局部变量表示动态局部变量,分配到栈上。 register 一般修饰全局变量,编译器尽量将其分配到寄存器中,读写效率会很高,但是寄存器资源有限,不能所有变量 都放到寄存里。 extern 如果跨文件使用全局变量,就必须在本文件中用extern修饰再声明才能在...
自己制作静态/动态链接库并使用 详细内容跳转至博主:https://blog.csdn.net/freestyle4568/article/details/49817799 静态链接库 #vi mylib.c //编辑库函数定义源码#include <stdio.h>void printfHello(void){ printf("Hello mylib");}i...
大小端模式(共用体union测试、指针测试) 存储系统中的大小端模式 区分大小端 0x01 高位对数据低字节-------大端 B3 B2 B1 B0 01 00 00 00 高位对数据高字节-------小端 B3 B2 B1 B0 00 00 00 01 ...
内存对齐 转载:https://blog.csdn.net/markl22222/article/details/38051483 Wrote by mutouyun. (http://darkc.at/about-data-structure-alignment/) 指定内存对齐在C++98/03里,对内存对齐的操作在不同的编译器里可能有不同的方法。在MSVC中,一...
GCC编译过程 gcc编译内部其实集成了多个组件来实现编译预处理----->编译成汇编文件----->汇编------>链接1、预处理: 为编译前做准备工作,经过预处理后生成后缀为.i的文件,实际上还是C文件, Linux下完成只预处理不编译:gcc -E xxx.c -o xxx.i 预处理主要完成的工作 (1).源代码中的注释经过预处理之后产生的.i文...
c语言中定义一个变量或常量时的内存分配 一、栈内存 操作系统会为每个进程分配一定空间的栈内存,定义的局部变量会存储在自动分配的栈内存中,局部变量使用完毕后 地址会空出来用来再次被分配,但是这个地址所对应的存储内容还是上一次分配时所赋值的内容,不会被擦除,栈内 存是一个反复被覆盖写入而不擦除的的内存。栈内存大小有限,如果要存储大块数据就不要以局部变量的方式存储了。 二、堆内...
数组指针与指针数组 、函数指针与指针函数 内容持续补充。。。。 int *p[5] [ ]的优先级是最高的,先与p结合,那么首先上面的是一个数组, 数组里面存储的五个元素是int *类型 指针数组 int (*p)[5] ( )无视优先级,*先与p结合,那么p就是一个指针, 指向含有5个int型元素数组的的一个指针 ...
指针使用时的注意项 定义和初始化 int a=0; int *p=&a; //定义同时初始化 int a=0; int *p=NULL; p=&a; //先定义然后初始化 注意两种方法中分别出现的*p=&a和p=&a *p=&a只能出现在定义同时初始化这种情况下,这里应该将*p中的*结合int来理解:将a的地址付给int *类型的...
sizeof()和strlen() #define和typedef +(内联函数) 内容持续补充。。。。。一、区别 sizeof() sizeof()不是函数而是运算符,作用是返回变量或者数据类型所占据的存储空间大小,可以让程序适应不同平台下 数据类型所占空间不一样的问题。 strlen() 传入值只能是字符串,计算字符串长度,这个长度不包括字符串结束的 "\0" char a[]={"hello"}; in...
函数传参 一种高效的传参方法是直接使用函数操作全局变量,省去了常规传参时的开销,但是使用更多的是常规传参方式。如果所传参数很多,通常做法是打包成结构体,传结构体指针进去。 输入型参数,输出型参数 输入型参数:+const修饰的指针,函数内部不需要,也不能修改该值 输出型参数:不+const修饰的指针,经函数内部操作处理后输出 不是指针为输入型 数组传参...
C语言实现简单多线程网络聊天室 所遇到的问题 1.线程资源的回收 一、服务器所创建的线程是分离式的,线程运行完毕(客户端挂了,断开连接)自动回收 二、客户端子线程不是分离式,需要手动回收,但是子线程进入了阻塞,无法自己跳出循环,如果ctrl+c结 束程序,子线程无法回收,自己采用的解决方法是:退出时置子线程循环开关为-1,再让服务器发送一个信号 过...
C语言中的垃圾回收分析 转自中国论文网:https://m.xzbu.com/8/view-7218540.htm (通过公众号下载码下载,如果还存在版权问题请联系删除) 摘要: C语言没有运行时库,无法自动压缩使用中的内存,缩小堆栈所需内存空间。若只申请内存,没有释放,势必造成系统内存不断减少、丢失。长时间的运行,最终导致系统死机。文章阐述了C语言垃圾产生的原因,并从引用计数、标记...
线程同步—条件变量 条件变量通常配合互斥锁使用 条件变量主要包括以下基本函数: pthread_cond_init(&cond,默认NULL); //初始化 pthread_cond_wait(&cond); /_timewait(&cond,超时时间); pthread_cond_signal(&cond);发信号 /_broadcas...
多线程与互斥锁 转载自博主:https://blog.csdn.net/qq_27312943/article/details/79084781 有的linux版本没有包含以下函数的man手册,需要手动下载!Ubuntu下载方法:apt-get install manpages-posix-dev 互斥锁 主要作用是关键段代码保护, 上锁 访...
线程同步——信号量 以一个简单的示例介绍线程创建,回收,同步。 双线程实现主线程获取用户输入并判断是否退出, 子线程统计每次输入字符串的字符数 /*双线程实现主线程获取用户输入并判断是否退出,子线程负责统计每次输入字符串的字符数*/#include <stdio.h>#include <string.h>#include <pthread.h>#in...
线程的创建,回收,取消 线程创建 int pthread_create(pthread_t *th, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg); 参数一:输出型参数,相当于线程号,指向线程标识符的指针 参数二:用来设置线程属性 参数三:输入型参数,线程运行函数的地址 参数四:运行函...
线程(笔记)——线程的引入 线程应该是进程的一个改进和提升,解决了进程间通信困难,和进程调度开销大的问题。 多线程程序在多线程的CPU上实现了真正意义上的并行操作pthread_create(); 接收参数:举例: 创建一个线程分支;实现同时读取鼠标和键盘、 注意:编译时链接动态库 gcc xxx -lpthread#include<stdio.h>...
并发式IO的解决方案 非阻塞IO、多路复用IO和异步IO 非阻塞IO 以度键盘为例,键盘这个标准输入的fd已经被打开,使用fctrl函数来改变其属性,设置为非阻塞式(O_NONBLOCK)#include<stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <str...
多路复用I/O select()函数 转自:http://blog.sina.com.cn/s/blog_732784f70100tkjo.html select()在SOCKET编程中还是比较重要的,可是对于初学SOCKET的人来说都不太爱用select()写程序,他们只是习惯写诸如 conncet()、accept()、recv()或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程...
alarm定时和pause函数 alarm闹钟 alarm(秒); 定时时间到则产生一个SIGALRM信号、 如果上一次调用alarm设置的时间未到,再次调用alarm并且时间设置为0,则是取消上一次的调用,不为0会被第二次 调用掩盖,第一次的定时无用。 内核只对每个进程维护一个alarm,后面的会掩盖前面的。void si...