
C++
文章平均质量分 75
C++
u013250861
这个作者很懒,什么都没留下…
展开
-
C++动态库和静态库的区别:代码被载入的时刻不同【①静态库的代码在编译链接时已经被载入可执行程序,体积较大;②动态库(共享库)的代码在可执行程序运行时才载入内存,在编译过程中仅简单的引用,降低耦合】
库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库是一种可执行代码的二进制形式,可以***作系统载入内存执行。库有两种:静态库(.a、.lib)和动态库(.so、.dll)。所谓静态、动态是指链接。原创 2024-06-08 09:40:38 · 660 阅读 · 0 评论 -
2024 最新PyTorch源码编译流程和踩坑记录,PyTorch build from source
然后执行,其中MAX_JOBS是并行编译,如果你机器性能不好,建议设置为1,不然可能编译到最后的时候,容易爆内存,然后重新来过.....我的环境是16G内存,CPU是13th Gen Intel(R) Core(TM) i9-13900H,基本上设置MAX_JOBS=4差不多能把内存占满。通过下面的命令下载Pytorch以及所需要的第三方插件,但这个过程会反复失败,问题就是github是境外的原因,即使挂了梯子,依然会反复失败,只能看运气下载成功,因为所有文件大小差不多1~2G,所以全看你的网络情况。原创 2024-06-01 08:37:04 · 2631 阅读 · 1 评论 -
PyTorch C++源码调试
2.python运行你写好的py代码,需要使用debug模式(让程序在进程在系统中保留,你可以用pdb.set_trace)实现或者用time.sleep()让程序休眠,以获取其进程号。不过我更加喜欢的是直接。运行此代码后在pdb.set_trace()部分暂停。网络上有很多方式,说一说我的测试(假设python代码为。1.使用Python编写 PyTorch 代码。3.gdb连接这个运行的python程序进程。原创 2024-06-01 08:31:57 · 838 阅读 · 0 评论 -
技术贴 | 一文掌握 Google Test 框架【gtest】
在开发过程中,如何保证代码的质量以及程序的正确性成为了我们亟需解决的问题,其中测试用例成为了不必可少的一部分。gtest 默认是不捕捉异常的,因此假如你的测试用例抛了一个异常,很可能会弹出一个对话框,这非常的不友好,同时也阻碍了测试用例的运行。gtest 框架生成详细的测试报告,显示每个测试用例的运行结果,包括通过的用例和失败的用例。用途:当待测试方法的行为取决于传入的参数时,而且这些参数的不同组合有多种, 而你又不想为此写多个类似的 test case 时,可以用参数化测试。类似模板中的编译检查。原创 2024-05-30 18:48:53 · 7252 阅读 · 0 评论 -
RestFul、RPC、gRPC、protobuf【gRPC默认使用protocol buffers】【网关和外界的数据传输使用RestFul,微服务内部的各模块之间使用RPC】
一、RPCRPC(Remote Procedure Call,远程过程调用)是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络细节的应用程序通信协议。RPC协议构建于TCP或UDP,或者是HTTP上。允许开发者直接调用另一台服务器上的程序,而开发者无需另外的为这个调用过程编写网络通信相关代码,使得开发网络分布式程序在内的应用程序更加容易RPC采用客户端-服务器端的工作模式,请求程序就是一个客户端,而服务提供程序就是一个服务器端。当执行一个远程过程调用时,客户端程序首先先发送一个带有参数的调原创 2022-05-24 23:59:18 · 570 阅读 · 0 评论 -
C++:=delete用法【当我们定义一个类的成员函数时,如果后面使用“=delete“去修饰,就表示此函数被定义为deleted,即此成员函数不能再被调用,否则就会出错】
C++11中,当我们定义一个类的时,如果后面使用"=delete"去修饰,那么就表示这个函数被定义为deleted,也就意味着这个成员函数不能再被调用,否则就会出错。编译时直接报错,如下,在C++11之前,当我们希望一个类不能被拷贝,就会把构造函数定义为private,但是在C++11里就不需要这样做了,只需要在构造函数后面加上=delete来修饰下就可以了。原创 2022-11-15 20:22:20 · 1292 阅读 · 0 评论 -
解决C++: fatal error: Killed signal terminated program cc1plus
swap0文件的路径在/var/cache/swap/下,编译完后, 如果不想要交换分区了, 可以删除。通过创建swap分区解决了这个问题,编译成功。查阅相关信息后,认为是。原创 2022-11-14 21:32:46 · 589 阅读 · 0 评论 -
C++:static【规定此全局变量只在当前模块(文件)中可见】、const【只读的全局变量,其值不可修改,只在声明中使用】、static const【既是只读的,又是只在当前模块中可见的】
static const 应该就是上面两者的合集.此全局变量只在当前模块(文件)中可见。原创 2022-11-05 00:38:28 · 1441 阅读 · 0 评论 -
cJSON:一个轻量级C语言JSON解析器
它采用完全独立于编程语言的文本格式来存储和表示数据,语法简洁、层次结构清晰,易于人阅读和编写,同时也易于机器解析和生成,有效的提升了网络传输效率。字面值:false、null、true中的一个(必须是小写)每个名称和值成对出现,名称和值之间使用”:“分隔;以"{“开始,以”}“结束,允许嵌套使用;数字:直接表示,可以是整数,也可以是浮点数。在这些字符前后允许存在无意义的空白符;数组:使用"[“和”]"表示。键值对之间用”,"分隔。字符串:使用引号"表示。一个新的json对象。原创 2022-09-16 07:51:29 · 478 阅读 · 0 评论 -
C++11新特性之nullptr【nullptr是nullptr_t类型的右值常量,专门用于初始化空类型的指针】
为了来剖析这两者的区别,我们先来看一个什么是野指针;上面的代码中,serven_p就是野指针,因为定义他的时候没有给他指向的地方,导致他指向了哪些不可用的内存区域:所以你定义了指针,就算没有使用他,你也要给个空给他,不然等到内存溢出崩溃的时候,不仅他会哭,你也会被急哭。在C++98/03标准中,我们在定义一个指针并且给其赋值为空的时候有两种写法,不仅可以使用NULL,也可以使用0,不信你去试试看:这两种写法完全木有问题,都是OK的。但还是推荐使用第一种写法。毕竟代码编写要规范嘛(这里备注一下:代码编原创 2022-07-12 22:11:50 · 481 阅读 · 0 评论 -
C++:结构体【C++的结构体有①构造函数、②析构函数;C没有】【C++的结构体就是类】【struct变量放栈上(自动释放),class变量放堆上(手动释放)】【结构体默认公共,类默认私有】
结构体属于用户自定义的数据类型,允许用户存储不同的数据类型。语法: 1.利用结构体自带的默认构造函数2.利用带参数的构造函数3.利用默认无参的构造函数结构体使用规则:通过结构体创建变量的方式01:打印结果:2、通过结构体创建变量的方式02通过结构体创建变量的方式02:打印结果:3、通过结构体创建变量的方式03通过结构体创建变量的方式02:打印结果:四、结构体数组作用:将自定义的结构体放入数组中方便维护。语法:打印结果:五、结构体指针作用:通过指针访问结构体中的成员。利用操作符 可原创 2022-07-12 21:02:29 · 1459 阅读 · 0 评论 -
GDB调试C/C++程序【Linux安装gdb】
软件开发的一个重要工作是测试程序和排除错误。调试器是一个程序,可以在一个精确受控的环境中执行另一个程序。例如,调试器可以单步运行和跟踪程序,查看变量内容、内存位置,以及每条语句执行完成后CPU寄存器的变化情况。同时调试器也可以分析在执行到程序中给定位置之前的函数调用栈。GNU调试器(GDB)是一个功能强大、应用广泛的调试器。(http://www.gnu.org/software/gdb/documentation)通过命令gdb -version可以查看本机gdb的版本信息。参考资料:GDB调试C/C+原创 2022-06-28 22:27:23 · 427 阅读 · 0 评论 -
C++:数组--作为-->函数参数【数组仅在定义其的域范围内可确定大小】【数组作为函数参数传递后被转换成指针,其大小信息丢失,只剩下数组中第一个元素的信息】
data1是一个数组,sizeof(data1)是求数组的大小。这个数组包含5个整数,每个整数占4个字节,因为总共是20个字节。data2声明为指针,尽管它指向了数组data1,对认真指针求sizeof,得到的结果都是8。在C/C++中,当数组作为函数的参数进行传递时,数组就自动退化为同类型的指针。因此尽管函数GetSize的参数data被声明为数组,但它会退化为指针,size3的结果仍然是8。二、数组的两个特殊性质1、不允许拷贝和赋值不能将数组的内容拷贝给其他数组作为其初始值,也.......原创 2022-06-18 16:25:22 · 707 阅读 · 0 评论 -
C/C++动态开辟数组【C++:new/delete(推荐):int *arr = new int[m];】【C++:vector】【C:malloc() & free()】
打印结果:2、动态开辟二维数组3、动态开辟数组、释放空间3.1 动态开辟数组3.2 释放空间当不再需要一个动态分配的多维数组时,可按以下步骤释放它所占用的空间。3.3 案例打印结果:C语言 中malloc()函数的标准形式C++ 中free()函数的标准形式注意引用头文件stdlib.h因为数组中必须为常量表达式,如果不是,则此时无法成功创建数组这时便可以使用动态开辟的方法解决该问题。补充说明打印结果:特点打印结果:特点打印结果:特点参考资料:c语言动态开辟原创 2022-06-16 23:51:28 · 3675 阅读 · 0 评论 -
C++线程/线程池:thread、mutex、condition_variable、future、promise
C++线程:thread、mutex、condition_variable、future、promise原创 2022-06-15 21:33:51 · 302 阅读 · 0 评论 -
C++-Web框架:Drogon、Proxygen、Oat++、Crow、C++ REST SDK、Pistache、Silicon、Civetweb、Wt、cinatra
众所周知,C++ 并不是一种流行的 Web 开发语言,究其原因有很多:语言门槛高、使用难度大、开发效率低 … 话虽如此,但随着 Emscripten 的成熟,未来 C++ 在 Web 方面会发挥更大的潜能,尤其是游戏、3D 应用等方面。Drogon 是一个基于 C++14/17 的 Http 应用框架,使用 Drogon 可以方便的使用 C++ 构建各种类型的 Web 应用服务端程序。Star:3.7kGitHub:https://github.com/an-tao/drogonProxygen 是 Fa原创 2022-06-07 00:29:09 · 6025 阅读 · 0 评论