0%

gcc 关键字__thread

__thread

Thread Local Storage:线程局部存储(tls)分配的变量,每个当前线程有一个该变量的实例。__thread 是 gcc 内置的线程局部存储设施,其存储效率可以和全局变量相比;__thread 变量在每一个线程中都有一份独立实例,各线程值是互不干扰的。
可以用来修饰那些带有全局性且值可能变,但是又不值得用全局变量保护的变量。只能修饰 POD 类型(类似整型指针的标量,不带自定义的构造、拷贝、赋值、析构的类型,二进制内容可以任意复制 memset,memcpy,且内容可以复原)。
不能修饰 class 类型,因为无法自动调用构造和析构函数可用于修饰全局变量,函数内的静态变量,不能修饰函数的局部变量或 class 的普通成员变量。且__thread 变量值只能初始化为编译器常量。

阅读全文 »

自用 .clang-format 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Language: Cpp
BasedOnStyle: Microsoft
#缩进宽度
IndentWidth: 4
#tab的宽度
TabWidth: 4
#在控制语句(if、else、for、do和while)后面插入大括号
InsertBraces: true
#开括号(开圆括号、开尖括号、开方括号)后的对齐
AlignAfterOpenBracket: Align
#对齐连续赋值
AlignConsecutiveAssignments:
Enabled: true
AlignCompound: true
PadOperators: true
#位段对齐
AlignConsecutiveBitFields:
Enabled: true
#位段列的空白风格
BitFieldColonSpacing: None
#每行代码长度
ColumnLimit: 90
#对齐结构体数组
AlignArrayOfStructures: Left
#连续宏定义对齐
AlignConsecutiveMacros: true
#连续声明对齐
AlignConsecutiveDeclarations:
Enabled: true
#对齐分割语法行的斜杠符\
AlignEscapedNewlines: Left
#对齐尾部注释
AlignTrailingComments:
Kind: Always
#允许if块在单行上
AllowShortIfStatementsOnASingleLine: true
#装箱变量
BinPackArguments: true
#装箱声明参数
BinPackParameters: true
#大括号断行风格
BreakBeforeBraces: Allman
# 指针和引用的对齐: Left, Right, Middle
PointerAlignment: Right
#二元操作符在非赋值操作符之前断行
BreakBeforeBinaryOperators: NonAssignment
#字符串常量断行
BreakStringLiterals: false

GCC 强制链接静态库的两种方式

使用 -static

在编译时使用 -static ​选项,将会强制所有库使用静态链接,这个选项是全局的,会影响所有链接的库

阅读全文 »

DPDK Graph 框架节点间传递报文方式

DPDK Graph 框架在 node 间传递 object 对象的方式主要有两种:Normal Enqueue 和 Home Run

其中,Normal Enqueue 又可以细分为使用 rte_node_next_stream_getrte_node_next_stream_put 的手动复制流程和使用 rte_node_enqueue* 系列函数的简单流程

阅读全文 »

windows常用系统环境变量

环境变量 对应路径
%ALLUSERSPROFILE% C:\ProgramData
%APPDATA% C:\Users\用户名\AppData\Roaming
%COMMONPROGRAMFILES% C:\Program Files\Common Files
%COMMONPROGRAMFILES(x86)% C:\Program Files (x86)\Common Files
%COMSPEC% C:\Windows\System32\cmd.exe
%HOMEDRIVE% 和 %SystemDrive% C:|
%HOMEPATH% C:\Users\用户名
%LOCALAPPDATA% C:\Users\用户名\AppData\Local
%PROGRAMDATA% C:\ProgramData
%PROGRAMFILES% C:\Program Files
%PROGRAMFILES(X86)% C:\Program Files (x86)
%PUBLIC% C:\UsersPublic
%SystemRoot% C:\Windows
%TEMP% 和 %TMP% C:\Users\用户名\AppData\LocalTemp
%USERPROFILE% C:\Users 用户名
%WINDIR% C:\Windows

Windows下搭建wsl2 Arch Linux开发环境

配置 wsl

启用 Windows-Subsystem-Linux

控制面板​-程序​- 启用或关闭 Windows 功能​ 中勾选 适用于 Linux 的 Windows 子系统​ 以及 虚拟机平台​(wsl2 需要)

阅读全文 »

gdb的使用

  • GDB 是 Linux 下非常好用且强大的调试工具。GDB 可以调试 C、C++、Go、java、 objective-c、PHP 等语言。对于一名 Linux 下工作的 c/c++ 程序员,GDB 是必不可少的工具,本篇以 C 语言来调试。

  • 要调试 C/C++ 的程序,首先在编译时,要使用 gdb 调试程序,在使用 gcc 编译源代码时必须加上“-g”参数。保留调试信息,否则不能使用 GDB 进行调试。

    阅读全文 »