自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

板栗的学习日常

学,都可以学

  • 博客(33)
  • 收藏
  • 关注

原创 readv函数和writev函数

在介绍readv函数和writev函数之前,首先需要介绍一个结构体:iovec结构体。它是C语言中的一个结构体,用于描述一个缓冲区的地址和长度。iovec结构有两个成员,分别是和。是一个指针,指向缓冲区的起始地址。是一个size_t类型的整数,表示缓冲区的长度。通常使用iovec结构数组来操作一组缓冲区,每个iovec结构表示一个缓冲区。

2024-03-31 14:28:25 274

原创 通过socketpair()函数实现同一进程内部的进程间通信(IPC)

本文通过socketpair()函数创建了一对相关的套接字(sv[2]),然后使用fork()函数创建了一个子进程。通过创建一对文件描述符,可以在同一进程内模拟两个不同的套接字,并通过这些套接字进行进程间的通信。通过使用文件描述符,可以方便地在同一进程内部进行通信,而不需要借助额外的进程间通信机制(如共享内存、消息队列等)来实现进程之间的信息交换。在这个调用完成之后,会有两个进程同时运行,一个是父进程,一个是新创建的子进程。语句之后执行不同的代码,从而实现了进程的分离和分别执行不同的逻辑。

2024-03-25 15:29:58 411

原创 POLL轮询事件类型使用方法

POLL是一个系统调用和对应的事件类型,用于异步地等待多个文件描述符上的事件。它是一种用于轮询事件的方法,可以用于实现IO多路复用。

2024-03-18 15:59:23 373

原创 利用位运算符设置标志位

在写程序的过程中,会碰到需要修改标志位的情况。比如需要设置一个文件标识符可读或可写,首先想到的是利用int变量(1表示不可读不可写 ,2表示不可读可写,3表示可读不可写,4表示可读可写)。但是这样不直观,比较难记。在计算机底层使用0、1存储,因此我们可以使用int变量进行位运算来设置标志位

2024-03-14 14:36:40 494

原创 C++使用typedef定义函数指针

typedef是 C++ 中的关键字,用于给已有的类型创建一个新的类型

2024-03-14 13:45:08 388

原创 HTTP请求中URL编码转为中文

例如,在UTF-8编码中,汉字 "中" 的编码是 "E4 B8 AD",它会被URL编码为 "%E4%B8%AD"。这里的 %E4 对应十六进制的 "E4",%B8 对应 "B8",%AD 对应 "AD"。要将URL编码转为中文,可以使用URL解码的方法,即将%后跟两位十六进制数字的编码转换为对应的字符。由于UTF-8编码中,一个中文字符通常由三个字节表示,所以在URL编码时会产生三个十六进制的转码。例如,%E2 表示的是十六进制的编码,对应的ASCII码是 226。

2024-03-12 10:59:06 618

原创 C语言scandir函数获取文件夹内容

scandir函数用于列举指定目录下的文件列表,并将结果存储在一个动态分配的数组中。将指向一个动态分配的指针数组,每个指针指向一个。结构体,表示一个文件或子目录的元数据。以下是一个简单示例,演示如何使用。

2024-03-10 15:36:42 378

原创 struct stat结构体变量

struct stat结构体变量,可以获取文件或目录的这些属性信息,然后利用这些信息进行相应的操作。是一个用于保存文件或目录的属性信息的结构体。它在标准库中定义,并在。通过调用stat()

2024-03-07 19:58:27 373

原创 动态分配和静态分配

动态分配相比于静态分配的主要优点是具有灵活性和可调整性,在程序运行过程中可以动态分配和释放内存。然而,使用动态分配需要注意内存泄漏的风险,并且需要手动管理内存的分配和释放,增加了程序的复杂性。动态分配的内存空间在程序需要时分配,不再需要时需要手动释放。静态分配的内存空间在整个程序执行期间都存在,而动态分配的内存空间在需要时分配,在不再需要时需要手动释放。静态分配在编译时将内存分配给变量,动态分配在运行时根据需要手动分配内存空间。静态分配的内存空间存在于栈中,而动态分配的内存空间存在于堆中。

2024-02-29 19:08:16 419

原创 内存中栈和堆的区别

栈上的内存分配和释放是自动的,遵循函数的调用和返回规则,当函数调用结束时,栈上的局部变量会自动被释放。堆上的内存分配和释放需要手动管理,对内存的管理比较灵活,但也需要注意手动释放内存,以防止内存泄漏。栈上的数据的生命周期是与其所在的作用域绑定的,当作用域结束时,栈上的数据就会自动释放。由于栈上的内存分配和释放是由编译器自动完成的,所以访问栈上的内存速度相对较快。栈上的内存是连续的,相邻变量的地址紧挨在一起。栈上的内存分配和释放是由编译器自动完成的,堆上的内存分配和释放是由程序员手动操作的。

2024-02-29 19:05:55 498

原创 简单总结内存泄露

内存泄漏会导致程序占用的内存不断增加,当泄漏的内存达到一定程度时,系统的可用内存会被耗尽。这可能导致程序崩溃、运行缓慢或其他异常。为了避免内存泄漏,应当及时释放动态分配的内存,并确保引用动态分配内存的指针不会在其使用完毕后丢失。使用智能指针等资源管理工具可以帮助自动释放内存,减少内存泄漏的风险。内存泄漏是指在程序运行过程中,动态分配的内存没有被释放或释放不当而导致内存无法再被使用的情况。这会导致程序占用的内存不断增加,最终耗尽系统的可用内存。

2024-02-29 19:04:20 302

原创 c++智能指针的介绍

智能指针是C++标准库提供的一组用于管理动态分配的资源(如堆内存)的智能化指针。智能指针的主要作用是确保资源在不再需要时被正确地释放,从而避免内存泄漏和悬挂指针等问题。一个简单的例子是使用unique_ptr智能指针管理动态分配的内存。在上面的代码中,我们通过new运算符动态分配了一个int类型的内存空间,并在使用完之后忘记释放该内存空间。这样会导致内存泄漏。为了解决这个问题,我们可以改用unique_ptr智能指针来管理这段动态分配的内存。

2024-02-29 19:01:04 368

原创 使用CMake和GNU make 在Linux上编译并使用开源库jsoncpp

JsonCpp是一个用C++编写的开源JSON序列化和反序列化库。它提供了一种方便的方式来读写JSON数据,并支持将JSON数据与C++对象进行相互转换。JsonCpp库支持C++11标准,并可以轻松地与其他C++库集成。JsonCpp库的使用非常简单,可以通过包含头文件和链接库来使用。它能够在各种平台上运行,并且具有良好的性能和稳定性。JsonCpp库被广泛应用于各种领域,例如游戏开发、网络通信、数据交换等。

2024-02-19 11:35:24 1006

原创 C++中的IO多路复用(select、poll、epoll)总结

I/O多路复用(IO multiplexing)是一种并发处理多个I/O操作的机制。它允许一个进程或线程同时监听多个文件描述符(如套接字、管道、标准输入等)的I/O事件,并在有事件发生时进行处理。传统的I/O模型中,通常使用阻塞I/O和非阻塞I/O来处理单个I/O操作。如果需要同时处理多个I/O操作,那么需要使用多个线程或多个进程来管理和执行这些I/O操作。这种方式会导致系统资源的浪费,且编程复杂度较高。而I/O多路复用通过提供一个统一的接口,如select、poll、epoll。

2024-02-16 11:49:39 1254 1

原创 VScode利用嵌套CMake编译需要生成两个可执行文件的项目

CMake支持嵌套结构,您可以在一个CMakeLists.txt文件中使用add_subdirectory()函数来引入其他目录中的CMakeLists.txt文件。这样可以形成CMake项目的嵌套结构。

2024-01-24 12:07:10 1055

原创 利用cmake配置VScode的C++运行与调试环境

通过使用CMake工具,我们可以方便地配置VS Code的C++运行和调试环境。CMake提供了一种跨平台的方式来生成构建文件,使得我们可以将项目与VS Code无缝集成,并通过简单的设置,轻松地实现编译、运行和调试C++代码的功能。本文将介绍如何使用CMake配置VS Code的C++环境,并详细说明设置运行和调试选项的步骤。

2024-01-17 16:17:05 1302

原创 两种不同的pthread库

pthread库分为两种,一种是Windows平台的pthread库(pthread for win32),另一种是Linux平台的pthread库(mingw-w64提供的gcc编译器(posix版本)提供的pthread)。其中两个库的实现有些许不同,例如对于pthread_t线程id的定义不同。

2024-01-11 16:14:37 404

原创 c++在Windows环境下编译器无法导入pthread库的解决方法

在成功安装好MinGW和g++编译器之后,在vscode当中依然无法导入Pthread库。经过查找资料发现pthread库还要单独安装一下才能使用。注:安装之后vscode依然报错的话,可以尝试将vscode重新启动,让它重新读取。

2024-01-10 15:59:47 431

原创 使用vsCode创建并运行一个简单的c++项目

介绍了在 VS Code 中安装 C++ 扩展的步骤,包括搜索并安装扩展、创建项目文件夹、编写 C++ 源文件、配置生成任务以及创建 `tasks.json` 和 `launch.json` 文件。文章还提及了如何使用编译器进行编译,并运行生成的可执行文件。此外,文章还介绍了如何在 `tasks.json` 文件中添加动态链接库指令。这些详细指导可以帮助在 VS Code 中更加方便地进行 C++ 编程,并且能够更好地理解和定制调试和构建任务。

2023-12-21 20:42:27 5261 1

原创 c++编译时报错undefined reference to `__imp_WSAStartup‘的解决方法

这些错误表明在Windows环境下,编译器无法找到涉及网络编程的函数的定义。这是因为这些函数属于Winsock库(ws2_32)。所以需要确保在编译时链接到ws2_32库。因为WSAStartup、socket、htons、bind、listen、accept、recv、send和WSACleanup等函数都是在ws2_32库中定义的。

2023-12-21 17:19:41 1250

原创 Windows系统多个CUDA版本的相互切换

在环境变量中调节path中的CUDA目录顺序即可

2023-11-26 10:42:36 156 1

原创 QT程序运行报错:E:\xxx\SogouInput\Components\

而报错中的E:\xxx\SogouInput\Components\,看上去有个搜狗输入法的文件夹,其实和输入法没什么关系,更多的可能是变量空间地址的问题。看来碰到了这种不好解释的问题还是得老老实实Debug。

2023-11-04 17:42:35 459 1

原创 Dlib库安装方法

打开网站:Links for dlib,选择一个和自己python版本对应的.whl文件, 创建一个python3.6的环境, 输入:pip install dlib-19.8.1-cp36-cp36m-win_amd64.whl进行安装,在本环境中进入python,导入python包:importdlib,回车。如果没有报错,则安装成功

2023-08-16 10:46:54 1475 1

原创 Windows cmd中出现错误:“‘make‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。”的解决方法

遇到这种“make不是内部或外部命令,也不是可运行的程序或批处理文件。”的报错,若不是拼写输入错误,则大概率是没有对应的工具,需要下载并安装

2023-08-15 14:32:04 5703 4

原创 学习记录:利用预训练ssd_mobilenet_v1_coco模型实现Tensorflow物体检测

COCO数据集由微软出资标注并发布的大规模数据集,它可以用于对目标检测模型的训练,同时可以用于语义分割、图像标题生成等任务。图像中的目标都经过十分准确的segmentation位置定位,COCO数据集包括90个目标标签。

2023-08-11 15:13:01 363 1

原创 学习记录:Inception-V3图片分类

Inception-V3模型是谷歌在大型图像数据库ImageNet上训练好的一个图像分类模型,这个模型可以对1000种类别的图像进行分类,是一种用于实现ImageNet上大规模视觉任务的一种神经网络。imagenet_2012_challenge_label_map_proto.pbtxt (编号到字符串的对应关系)imagenet_synset_to_human_label_map.txt (字符串到类别名的对应关系)在进行预测之前,我们需要将后面两个关系合成为一个编号到类别名的对应关系,方便后续处理。

2023-08-09 12:05:48 457

原创 goLong中 fmt.Scanf无法读取空格字符串的解决方法

开自己小项目开发的过程中,发现我在控制台输入带空格的字符串的时候,使用fmt中自带的scanf()方法,它只能读取到空格之前的内容。我们可以自己写一个Scanf函数,主要利用的是bufio库中的一行一行读取的方法:ReadLine()该方法在服务器端展示客户端发来的信息只有空格前的内容(发送内容为:hello world!可以看到服务器端只获取到了hello这个单词,同时客户端也出现了不合理的信息读取错误。

2023-07-24 16:57:17 233

原创 学习记录:对抗式生成网络GAN

生成式对抗网络(GAN, Generative Adversarial Networks )是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的方法之一。生成模型(Generative Model)和判别模型(Discriminative Model)的互相博弈学习产生相当好的输出。原始 GAN 理论中,并不要求 G 和 D 都是神经网络,只需要是能拟合相应生成和判别的函数即可。但实用中一般均使用深度神经网络作为 G 和 D。一个优秀的GAN应用需要有良好的训练方法,否则可能由于神经网络模型。

2023-07-22 15:32:00 185

原创 学习记录:变分自编码器

VAE全称是Variational AutoEncoder,即变分自编码器。它不再是对一个样本直接生成一个隐层空间上的点,而是将经过神经网络编码后的隐藏层假设为一个标准的高斯分布,然后从这个分布中采样一个特征,再用这个特征进行解码,期望得到与原始输入相同的结果。

2023-07-20 14:11:49 77 1

原创 学习记录:利用Keras+CNN实现自编码图像去躁

本文记录了自己学习相关代码后对本项目代码的一些注解。开始导入Keras包,准备入训练数据。编码,将其转化为低维度的隐性层。解码,将其还原为7*7*32。使用训练好的网络模型进行预测。首先导入mnist数据库。首先展示加入噪声之后的图片。将训练出来的图像展示出来。

2023-07-18 13:01:29 318

原创 在Python中使用imread与imresize时出现错误的解决办法

在Scipy库中imread()可以将图片读入项目中,imresize()可以重新设置图片大小。但是在调用的时候pycharm报以下错误:AttributeError: scipy.misc is deprecated and has no attribute imread.

2023-07-15 12:20:24 819 1

原创 GoLang变量的四种定义方法

在自己快速跑完一套Go入门课之后,动手写代码。写着写着发现参考的代码里面有部分全局变量的定义方式还是有点模糊, 这里的定义不是没有声明这个变量的类型吗?后面查阅自己的笔记之后发现是上面的第三种使用方式(可以自动类型判断),看来学习的过程中还确实要返回去复习。

2023-07-11 15:47:32 356 1

原创 tensorflow-gpu安装流程

第二个点就是要在environment variable中添加自己的cuda安装路径:在Name一项中填LD_LIBRARY_PATH, Value一项中填写安装的cuda的lib64路径(找不到的话可以定位到Cuda安装路径中,然后直接利用搜索框搜索lib64)其中2.xx.xx是tensorflow的版本,也可以不指定,不过由于安装tensorflow和其他工具版本对应要求非常严格,建议按照对应版本进行安装。如果不是,那么可以下拉框,然后选择自己的安装时候的版本。如果没有报错,那么说明安装成功。

2023-07-07 12:15:29 1607

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除