随笔分类 -  C/C++

摘要:void *memset(void *str, int c, size_t n) memset用来初始化数据,但是需要注意,memset是按照字节初始化的。对于char类型,可以随便设置,如果是int等大于一个字节的数据,只能设置0和-1,设置其他的值是无法满足需求的。 比如设置1,memset会对 阅读全文
posted @ 2024-02-25 15:46 秋来叶黄 阅读(142) 评论(0) 推荐(0) 编辑
摘要:struct userdata { uint32_t len; uint8_t data[0]; }; 在阅读一些开源代码时,比如linux kernel,会发现上面这种用法,这种叫做零长度数组。有什么作用呢?简单来说为了开发便利,顺便节省空间。 使用限制 只能放在结构体结尾,也就是一个结构体只能有 阅读全文
posted @ 2023-12-26 16:29 秋来叶黄 阅读(48) 评论(0) 推荐(0) 编辑
摘要:在使用c语言时,如果出现这个警告,是因为你使用了一个函数,但是没有在头文件中声明。 这种情况一般是写了一个局部使用的函数,不需要暴露出去,所以没有在头文件声明,直接在源文件开发。 这时需要使用static进行限定,让gcc知道该函数只限定在当前文件使用,不需要在头文件声明,就可以避免该警告 阅读全文
posted @ 2023-12-25 14:50 秋来叶黄 阅读(287) 评论(0) 推荐(0) 编辑
摘要:报上面的错误是因为类库的函数未定义。 实际上报错信息已经很明确指定了对应的函数,看似一团乱码,实际上最后的是函数名。因为c++为了多态会在重载的函数上加上不同后缀区分。 _ZN9 MyClass 14 MyFunction EPK19 MyParam hj 就是MyClass这个类中的MyFunct 阅读全文
posted @ 2023-12-13 16:36 秋来叶黄 阅读(77) 评论(0) 推荐(0) 编辑
摘要:开发中遇到一个问题,比如有一个类库A,被类库B引用,类库B和类库A都被程序C引用。类库A中有一个全局变量G,要求同一个进程中使用的是同一个全局变量G。 虽然看起来很简单,但是实际探究下来还有不少坑。 如果不是类库 如果A B都不是类库,而是直接引入源码编译,理论上比较方便解决。 示例一 pre.h 阅读全文
posted @ 2023-10-12 16:20 秋来叶黄 阅读(196) 评论(0) 推荐(0) 编辑
摘要:# 原因 编译的时候指定的动态库,在运行时没有找到。因为编译和运行需要查找的目录是不通用的,需要在运行时指定查找动态库的目录。 # 解决方法 运行时,指定动态库搜索的路径 ``` export LD_LIBRARY_PATH=/xxx/lib:$LD_LIBRARY_PATH ``` 阅读全文
posted @ 2023-08-18 17:42 秋来叶黄 阅读(119) 评论(0) 推荐(0) 编辑
摘要:前言 https://www.cnblogs.com/studywithallofyou/p/17435497.html https://www.cnblogs.com/studywithallofyou/p/16695550.html 上面的文章提到了一些相关的知识,本篇单独针对CPU进行详细讲解 阅读全文
posted @ 2023-08-14 15:31 秋来叶黄 阅读(1073) 评论(2) 推荐(1) 编辑
摘要:# 编译产物 hyperscan编译完成后有如下文件 ``` ls -R .: include lib64 share ./include: hs ./include/hs: hs_common.h hs_compile.h hs.h hs_runtime.h ./lib64: libhs.a li 阅读全文
posted @ 2023-08-10 14:41 秋来叶黄 阅读(250) 评论(0) 推荐(0) 编辑
摘要:原因 使用的gcc没有找到对应的glib库。 每个版本的glib都会有改变,所以使用的时候必须匹配。 大部分是因为自己编译升级了gcc,再用新的gcc编译程序时没有找到当时匹配的类库。 查找原因 报错提示很明确了,/lib64/libstdc++.so.6中没有找到GLIBCXX_3.4.26版本内 阅读全文
posted @ 2023-08-07 13:22 秋来叶黄 阅读(2839) 评论(0) 推荐(1) 编辑
摘要:前言 在数据传输过程中,难免会因为硬件问题,信号干扰,缓存问题,代码逻辑等导致读取到的数据与写入的数据不一致,对于这种错误的数据,我们需要能够及时发现并且进行错误处理。如果把错误的数据当作正常数据使用,会导致不可预料的各种错误。 如何校验数据是否正确,正常做法就是声明一种算法,把数据进行压缩加密,产 阅读全文
posted @ 2023-04-03 09:53 秋来叶黄 阅读(238) 评论(0) 推荐(0) 编辑
摘要:问题 开发过程中,同一系统上,两个进程,使用了共享内存方式通信。为了追求性能,一个进程是生产者,一个进程是消费者;一个负责写,一个负责读,没有锁。写入完成后,再更新写的标识;读取数据并操作完成后,再更新读取标识,理论上没有问题,但是服务器上运行起来后,会读取到无意义的内容。 读取数据很大或者无效数据 阅读全文
posted @ 2023-03-27 16:39 秋来叶黄 阅读(295) 评论(0) 推荐(0) 编辑
摘要:我们在学习c/c++的时候,最开始接触的就是变量的声明和定义。对于这两个概念大家都很熟悉,但是具体研究下来,往往比较模糊,尤其是在代码跟踪调试,对于ide提供的跳转到声明和跳转到定义,不能明确区分其差别。包括后续开发,全局变量的使用的时候,往往有各种编译问题,还有extern static等等对变量 阅读全文
posted @ 2022-10-18 16:35 秋来叶黄 阅读(234) 评论(0) 推荐(0) 编辑
摘要:如果是windows下,不用考虑了,直接visual studio,免费,功能强大。 linux下有很多ide,但是都不太好用,这里就个人使用,并且针对特定工程做一下介绍。 每种ide,如果用习惯了,肯定都可以胜任工作,这是个人习惯问题,本人就以个人上手以及某几个测试用例来说一下体验。 测试场景就是 阅读全文
posted @ 2022-09-21 16:21 秋来叶黄 阅读(8168) 评论(2) 推荐(2) 编辑
摘要:c语言中可以在初始化的时候指定数组索引的内容进行初始化赋值,不需要为每一个数组元素指定内容初始化。这个功能只是在c语言中有效,c++会报错。 int x[10] = { [2] = 1, [3] = 2 }; 这里就是为数组x的索引2和索引3指定的元素赋值,也就是把第三个元素赋值为1,第四个元素赋值 阅读全文
posted @ 2022-09-19 09:34 秋来叶黄 阅读(326) 评论(0) 推荐(0) 编辑
摘要:#介绍 在cpu设计中,有各种缓存,目前常见的是cache1 2 3(缓存1 缓存2 缓存3)三层,cache1更靠近cpu,空间更小,速度更快。cache1->cache2->cache3->内存 依次距离cpu更远,空间更大,速度更慢。缓存一般设计是由缓存行实现,每行64字节。也就是每个缓存中包 阅读全文
posted @ 2022-09-15 10:04 秋来叶黄 阅读(49) 评论(0) 推荐(0) 编辑
摘要:https://www.geeksforgeeks.org/structure-member-alignment-padding-and-data-packing/ https://stackoverflow.com/questions/3903164/why-misaligned-address- 阅读全文
posted @ 2022-09-14 16:40 秋来叶黄 阅读(306) 评论(0) 推荐(0) 编辑
摘要:一 union MyUnion { int a; INT64 b; char c[9]; }; MyUnion大小为16,最大变量为c,占用9个,填充7个 二 union MyUnion { int a; int b; char c[9]; }; union MyUnion1 { INT64 a; 阅读全文
posted @ 2022-09-14 11:03 秋来叶黄 阅读(470) 评论(0) 推荐(0) 编辑
摘要:一 struct MyStruct { short a[3]; }; 结构体大小为6,每个short是2个字节,3个正好是6 二 struct MyStruct { char a[3]; }; 结构体大小为3,每个char是1个字节,3个正好是3 三 struct MyStruct { short 阅读全文
posted @ 2022-09-14 10:46 秋来叶黄 阅读(146) 评论(0) 推荐(0) 编辑
摘要:这是因为你在main函数之前调用了其他函数,如下 void test() { cout << "aaa" << endl; } test(); int main() { return 0; } 这是不允许的,如果允许,那么main函数的意义何在。但是可以用另一种方法间接实现,就是虽然不允许直接调用, 阅读全文
posted @ 2022-08-02 14:46 秋来叶黄 阅读(4330) 评论(0) 推荐(0) 编辑
摘要:拷贝构造函数 拷贝构造是在传入一个类的实例作为参数创建新的类的时候触发的 class ctest { public: ctest(ctest& t) { cout << "ctest(ctest& t)" << endl; } }; 也可以为参数增加const修饰防止修改。触发拷贝构造的情况一般有两 阅读全文
posted @ 2021-03-25 13:11 秋来叶黄 阅读(160) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示