编程基础
文章平均质量分 64
Mountainest
这个作者很懒,什么都没留下…
展开
-
linux进程间通信与线程间通信
线程间通信隔离区:仅用于本进程内部的线程间通信,用户态、轻量级、资源开销少。enter、leave互斥量(mutex):命名,内核态,可以实现跨进程的线程间通信。信号量(Semaphore):命名,可以实现跨进程的线程间通信。允许多个线程在同一时刻访问同一份资源,但是线程数有限制。应用:限流、连接池事件:可以实现跨进程的线程间通信,通知进程间通信信号:如SIGINT(ctrl+c)、SIGHUP(session关闭,仍然在后台运行)、SIGTERM(kill命令,用于进程终止前的处理)等。参考原创 2021-04-26 20:12:45 · 175 阅读 · 0 评论 -
java多线程介绍
线程的三种创建方式1、实现lambda接口Runnable r = ()->{};Thread t = new Thread(r, "线程1");t.start();2、重写thead类Thread t = new ThreadDemo();t.start();3、带返回值Callable<Integer> c = ()->{return 1;};Futuretask<Integer> ft = new Futuretask<>(c);原创 2021-03-17 08:26:43 · 239 阅读 · 0 评论 -
数据结构与算法
数据结构栈队列二叉树完全二叉树二叉查找树二叉平衡树红黑树算法快速排序归并排序桶排序递归原创 2021-03-16 22:35:22 · 273 阅读 · 0 评论 -
gcc和g++的区别
gcc和g++只是一个调用器,根据各自的规则确定是调用对应的编译器(GUN C Compiler or GUN C++ Compiler)。区别如下: gcc g++ 编译阶段 对于c文件,按照c的编译规则; 对于cpp文件,按照c++的编译规则; c文件和cpp文件一律按照c++的编译规则 链接阶段 对于cpp文...原创 2019-05-23 22:54:25 · 137 阅读 · 0 评论 -
makefile入门
先来个例子:TARGET = mainSRCS = $(wildcard *.c)OBJS = $(SRCS:%.c=%.o)CC = g++$(TARGET):$(OBJS) $(CC) -o $@ $^ #g++ -o $(TARGET) $(OBJS)%.o:%.c $(CC) -c $<.PHONY:clean #没有这一句也OK。但是,如果在当前目录下...原创 2019-05-14 22:03:40 · 206 阅读 · 0 评论 -
const和#define的区别
1、编译处理阶段不同:define是在预处理阶段进行宏展开,const是在编译运行阶段。2、类型和安全检查不同:const常量有具体的类型,在编译阶段会执行类型检查,而define没有。3、存储方式不同:const常量会进行内存分配(C++中,对于简单类型的临时常量会保存在符号表里面进行替换,而不会分配内存),而define仅仅是展开,不会分配内存。4、有些调试工具可以对const进行调试,...原创 2018-11-03 22:34:48 · 4343 阅读 · 0 评论 -
C语言static关键字使用说明
1、static全局变量与普通的全局变量有什么区别?存储方式:全局变量本身就是静态存储方式,静态全局变量也只能是静态存储方式。这两者在存储方式上并无不同。作用域:非静态全局变量的作用域是整个源程序,而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它,如不能通过extern访问其他源文件的静态全局变量。2、static局部变量和普通局部变...原创 2018-11-03 22:25:34 · 667 阅读 · 0 评论 -
C语言inline函数说明
一句话总结:inline函数的定义(而不是申明)一般必须在头文件或本C文件内使用之前。inline是一种“用于实现的关键字”,而不是一种“用于声明的关键字”。关键字inline必须与函数实现放在一起才能使函数成为内联,仅将inline放在函数声明前面不起任何作用。如果内联函数在调用之后才定义,则编译器不会进行函数体替换,只会作为一个普通的函数调用。所以如果在C文件中定义,必须先定义后使用,...原创 2018-11-03 22:13:27 · 5032 阅读 · 0 评论 -
Linux进程地址空间典型布局
其中,数据区包括:1).data:保存已经初始化了的全局变量和局部静态变量。2).bss:未初始化的全局变量和局部静态变量。3).rodata:保存只读变量,如const常量或者字符串常量等。堆区是malloc和new分配的内存。Q&A1)如何直接访问指定地址的内存数据?在平坦的内存模型中,整个内存是一个统一的地址空间,可以使用32位指针(和系统有...原创 2018-09-08 18:12:34 · 258 阅读 · 0 评论 -
C语言可变参数列表
可变参数列表是通过宏来实现的,这些宏定义在stdarg.h头文件,它是标准库的一部分。这个头文件声明了一个类型va_list和三个宏:va_start、va_arg和va_end。typedef char *va_list;#define va_start(ap, A) (void)((ap) = (char *)&(A) + _Bnd(A, _AUPBND)) //第一个参...原创 2018-08-05 20:42:35 · 380 阅读 · 0 评论