- 博客(35)
- 收藏
- 关注
原创 [linux] nm -C 讲解
在 Linux 环境中,nm是一个命令行工具,用于显示目标文件(如可执行文件、目标文件或共享库.so文件)中符号表的内容。配合参数和管道操作,它可以实现很多功能。nm-Cnm-C.so.dllgrep.sogrepnm .so例子(未使用-Cnm -C .sogrep在nm输出中,符号类型用一列字母表示,比如TUD等。
2024-11-22 19:35:56
648
原创 C++ 基于 TLS(thread local storage)的 TID 获取
C++ 中,通过关键字来声明一个线程局部存储变量;同时,可以通过原子操作来保证变量的加载和存储操作;现在,我们将通过 TLS 和 原子操作,实现高频率的 tid 获取程序;在此之前,说明一下使用 gettid() 的劣势,gettid() 涉及到系统调用,在高频系统中,会增加额外的开销(内核和系统之间来回切换);// 线程局部存储,用于缓存 TID// 用于清空缓存// 获取线程 TID,采用原子操作避免系统调用// 获取缓存的 TIDif (vtid == 0) { // 如果缓存为空。
2024-11-14 11:21:45
557
原创 std::memory_order 多线程编程中的内存顺序
作用适用场景不保证内存顺序,仅确保原子性无需同步的简单计数操作仅确保后续读操作的顺序关系很少使用,通常用 acquire 替代确保获取操作前的写操作不会重排,适合读操作读取共享数据,确保读取的是最新数据确保释放操作后的写操作不会重排,适合写操作发布信息或更新状态读写均同步,防止重排读-修改-写的操作全局唯一顺序,最严格的内存保证对顺序要求严格的操作。
2024-11-14 10:05:54
973
原创 ldconfig 和 LD_LIBRARY_PATH 区别
功能ldconfig目的更新共享库缓存并创建符号链接,配置动态链接器设置库的查找路径,告知程序在哪里查找库作用范围系统级别,影响整个系统的共享库查找仅对当前会话或进程有效永久性是永久性的,一旦执行更新,影响系统的所有程序临时性,需要在每次会话中重新设置,除非添加到配置文件中操作对象更新系统的动态链接器缓存改变程序运行时查找共享库的路径使用场景安装新库后,更新系统库缓存和符号链接需要临时或手动指定额外的库目录。
2024-11-13 14:47:37
1809
原创 [cuda graph 系列] cuda graph基本介绍
CUDA Graph 是 NVIDIA CUDA 编程模型中用来优化 GPU 程序性能的一种技术。它允许我们把一系列连续的 GPU 操作(例如计算和数据传输)连接成一个“图”结构,并一次性提交给 GPU 来执行。这样可以减少 CPU 和 GPU 之间的通信开销,让 GPU 更流畅、高效地工作。CUDA Graph 是一种加速 GPU 程序执行的技术,它通过将任务组织成图结构,减少了 CPU 和 GPU 之间的通信开销,并且允许 GPU 自己安排任务的执行顺序,从而显著提高了性能。
2024-11-05 19:31:12
3481
原创 Linux 查看可执行文件所依赖的动态库
文件没有被剥离调试符号(即包含符号表、调试信息),因此文件体积较大,且在调试工具中可以查看完整的符号和源信息。:文件是为 ARM 的 64 位架构(aarch64)编译的,适用于 ARM64 或者 ARMv8 架构。该输出描述了一个 ARM 架构的 ELF 可执行文件的详细信息。:这是针对 GNU/Linux 系统编译的版本 1 格式的可执行文件。:这是一个 64 位的小端序(LSB)的 ELF 格式的可执行文件。:这是一个动态链接的可执行文件,因此依赖外部共享库 (命令来查看该文件依赖的所有共享库。
2024-11-01 11:53:02
576
原创 [shell 脚本系列-3] 命令行传参 使用
例子假设脚本内容为:SRC_ROOT=$1RES_DIR=$2echo "Source root directory: $SRC_ROOT"echo "Results directory: $RES_DIR"如果用以下命令运行该脚本:./script.sh /home/user/project /home/user/results输出将是:Source root directory: /home/user/projectResults directory: /home/user/r
2024-10-31 10:51:10
243
原创 [shell 脚本系列-2] 基本语法,基本命令
bin/bash如果你已经在系统中定义了/bin/bash$0:表示当前脚本的名字,可以是相对路径或绝对路径。dirname:获取文件路径中的目录部分,用于确定文件所在的目录。realpath:获取文件或目录的绝对路径,确保路径是标准化的。环境变量(如:用于在脚本中存储和传递重要的目录或文件路径信息。组合使用:通过结合dirname和realpath,你可以准确地获取脚本所在的目录,结合环境变量,让脚本更灵活和可移植。是一种在 Bash 中使用参数扩展。
2024-10-24 17:48:07
978
原创 常用 CMake 指令
用于指定目标的头文件搜索路径。可以使用INTERFACEPUBLIC或PRIVATE来控制可见性。虽然常见用法是紧随或后面,但只要在目标编译之前设置好包含目录即可。是 CMake 中用于链接外部库的命令。通过指定PRIVATEPUBLIC和INTERFACE,您可以控制库的可见性。这个命令帮助您将不同模块组合在一起,构建可执行文件和库。如果您有更具体的需求或其他问题,请随时告诉我!
2024-10-18 11:51:59
1255
原创 std::variant 详解
通过类型安全、自动管理生命周期、异常处理等机制,提供了更高级别的安全性。而union则是一个低级的、没有类型检查和自动管理的内存共用机制,因此需要开发者手动保证其安全性。
2024-10-18 10:20:03
1209
原创 c++结构体内存对齐 #pragma pack(push, 1) 和 #pragma pop()
将默认的对齐从8字节,转换成1字节,上面的结构体就占用 15 字节;如果想要恢复到原先的对齐方式(8字节),我们只要使用。
2024-10-14 14:19:54
172
原创 常用shell命令
tar -czvf archive.tar.gz /path/to/directory:将目录压缩为 .tar.gz 文件。zip archive.zip file1 file2:将文件 file1 和 file2 压缩为 archive.zip。find /path -name filename:在指定路径下查找名为 filename 的文件。wget http://example.com/file.zip:下载指定文件。tar -xzvf archive.tar.gz:解压 .tar.gz 文件。
2024-09-19 14:53:45
514
原创 环境变量,LD_PRELOAD和LD_LIBRARY_PATH区别
当你运行一个依赖共享库的程序时,动态链接器会根据该路径列表,优先搜索目录中的动态库文件,而非默认的 /usr/lib 路径。原理: linux的动态链接器 ld.so 会优先加载 LD_PRELOAD 中的库,覆盖或替换程序原本链接的库。用于存储配置信息的变量,每个系统进程都可以访问这些变量,并根据它们的值来改变自己的执行方式或操作环境;一个环境变量,用于在运行时强制加载一个动态库,它的优先级最高,比编译时绑定的动态库优先级还高;子进程继承父进程的环境变量,但子进程中新添加的环境变量不会被父进程拿到。
2024-09-19 14:18:00
458
原创 解决 VMWARE 虚拟机下 UBUNTU 18 无法连接网络问题
DHCP重新分配:在NAT模式下,VMnet8通过DHCP服务器分配IP地址。禁用并重新启用网卡会触发DHCP重新分配IP地址,确保虚拟机获得正确的网络配置。网络配置刷新:禁用并重新启用网卡会强制刷新网络配置,重新分配IP地址和网络参数。这有助于解决由于配置错误或冲突导致的网络连接问题。虚拟网络适配器重置:有时虚拟网络适配器可能会出现故障或配置错误,禁用并重新启用可以重置适配器,恢复正常功能。在网络连接中禁用VMWARE Network Adapter 1 和 8,之后重新启用,即可恢复。
2024-09-12 00:42:22
704
原创 install NVIDIA-driver from run-file
【代码】install NVIDIA-driver from run-file。
2023-10-06 10:47:21
455
1
原创 解决修改linux系统中sshd_config无法保存的问题
sudo vim /etc/ssh/sshd_config #添加sudo赋予root权限。强制保存(即便你是readonly)
2023-10-02 10:29:16
1437
1
原创 [C++ Primer] C16 一起粗略了解c++的类
A function parameter, like any other variable, is an lvalue expression. 即函数的参数都默认视为左值。在模板定义中,针对某个特定的类型或值,定义一个特殊的版本(或多个版本)来处理该类型或值。模板特化允许我们为特定的类型或值提供特殊的处理方式,使代码更加灵活和通用。在上面的例子中,如果我有多个参数会怎么样?我要把overload函数按照不同的参数数目重写吗?用typename…
2023-05-16 09:48:41
288
原创 [C++ Primer] C14 关于c++重载,你需要知道的一些知识
在上例中,如果我们用cout << a1 << endl;-> 编译报错,因为cout不支持我们定义的类A,所以我们要在A类中重写cout。类内写会自动绑定lhs为this,类外就不会。
2023-05-07 05:01:37
166
原创 [C++ Primer] C13 Copy control(重点章节)
【代码】[C++ Primer] C13 Copy control(重点章节)
2023-05-03 12:15:13
122
原创 [C++ Primer] C11 Associative Containers
/ 我们自定义了变量A,也要同时定义映射关系(comparator),map本身就是一种hash结构,他把key映射到空间上// 注意定义的map也要有WannaBigger!!!it!return 0;
2023-04-20 11:18:00
120
原创 [C++ Primer] C7(重点章节)
介绍如何定义一个类以及类的成员。类的成员包括数据成员和成员函数,数据成员表示类的状态,而成员函数则表示类的行为。在定义一个类时,需要确定类的数据成员和成员函数的访问权限。
2023-04-19 00:41:04
621
原创 constexpr and its difference between define:
Def: constexpr is a keyword that specifies that an expression can be evaluated at compile timeFeatures:Note that constexpr functions can also be used in non-constant expressions, in which case they will be evaluated at runtime just like regular functions
2023-04-18 05:23:18
81
原创 [C++ Primer] C4
4.2 关联性和优先级 precedence & asscotiatity。左值(location in memory) 和右值(contents)不要再同一个表达式既改变值又引用它!
2023-04-17 22:29:34
154
1
原创 [C++ Primer] C3
有一些数据结构无序hashset, hashmap(空间不连续),所以用iterator。Name -> 不要再头文件中使用 using。
2023-04-17 22:26:56
119
1
原创 [C++ Primer] C1,2
/ scope: 尽量不要把local和全局变量同名。-c 直接编译然后和别的文件link。-o 直接生成二进制文件。写一个脚本 run.sh。
2023-04-17 22:26:11
453
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅