编程语言
文章平均质量分 66
1
卢平光
这个作者很懒,什么都没留下…
展开
-
指针的妙用
指针或者叫做索引、下标,灵活使用可以完成比较巧妙地效果快慢指针快慢指针,表示两个指针,移动的速度不同,通常一般快指针速度是慢指针速度的两倍,通过两个指针相对位置的关系可以解决一些问题,例如:查找链表环起点问题算法步骤:快慢指针都从链表起点开始移动(两个指针速度插一倍),当两个指针再次相遇时停止本次移动ListNode fast, slow;fast = slow = head;while(fast != null && fast.next != null){ fast原创 2021-02-17 20:39:02 · 548 阅读 · 2 评论 -
动态库中的函数实现互斥调用
一直在纠结一个问题:如果一个函数使用互斥锁可以防止被调用时重入的情况,但是如果该函数以so的形式提供给使用者(其它进程),那么如何做到各进程间对于该函数的互斥调用呢?首先明确下前提:so被进程加载时,代码段共享,但是所有变量(局部、全局、静态变量)都是各进程copy一份私有使用。也就是说,想要在so内实现一个不可重入的函数还是比较困难的,因为所有变量都是独立的,考虑如下场景:驱动层给了一个视频码流录制的接口,并且没有在驱动层做互斥,但实际上这个接口同一时间只可能被一个进程调用,那么很明显,串原创 2021-03-25 10:20:53 · 1140 阅读 · 1 评论 -
gcc constructor编译属性的作用
GNU C 的一大特色就是__attribute__ 机制。attribute 是一个编译指令,可以设置函数属性(Function Attribute )、变量属性(Variable Attribute )和类型属性(Type Attribute )。attribute 书写特征是:attribute 前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribute__ 参数。若将某一函数的声明中添加 __ attribute__((constructor)) 属性,那么它具有两种运原创 2022-05-03 17:15:06 · 383 阅读 · 0 评论 -
C/C++特性
1、C2、C++1、内存C++类似C语言,变量定义、类实例化是区分存储位置的全局/局部定义的变量与实例化对象是在栈上,new出的实例化对象则在堆,此时栈上放的是实例化对象的指针,此时类似于java的引用变量但是new出的对象必须自己delete,尽管程序退出后会回收堆内存,但是一定要自己释放,因为有些程序是常驻的。C++的引用,是为变量/实例化对象起别名,因此定义时必须指定指代的对象,后面不能更改,这样以后就是修改指代对象本身而不是副本2、构造函数构造函数的构造顺序:首先是全局变量原创 2021-03-20 20:35:47 · 239 阅读 · 0 评论 -
编程实用小组件整理
1. 打印宏名打印枚举时,一般只能打印对应的整型值,以下两种方法可以打印枚举对应的字符串#include<stdio.h>enum color{ red, green, black, yellow};#define ENUMNAME(n) case n: return #nconst char* print...原创 2019-12-07 15:47:12 · 246 阅读 · 0 评论 -
位域与结构体的内存对齐
一. 一般结构体对齐规则结构体每个成员相对结构体首地址的偏移量(offset)是对齐参数的整数倍,如有需要会在成员之间填充字节。编译器在为结构体成员开辟空间时,首先检查预开辟空间的地址相对于结构体首地址的偏移量是否为对齐参数的整数倍,若是,则存放该成员;若不是,则填充若干字节,以达到整数倍的要求。1.1 结构体起始位置一定是内存对齐(对齐字节数可能默认为4字节、8字节,也可能是用户指定的1...原创 2019-05-23 08:40:41 · 539 阅读 · 1 评论