
C++
文章平均质量分 85
C++相关知识
我有一只可爱的草莓熊
这个作者很懒,什么都没留下…
展开
-
(转载)内存分配器101——写一个简单的内存分配器
之前学习过手写一个简单的内存分配器,原文是英文的,当初学习的时候便将英文翻译为中文的,方便阅读,当然和原文相比少了点味道。同时实现的内存分配器并不快速和高效,我们不会调整分配的内存使其和 a page boundary 对齐,但是它可以工作,就是这样。此外,操作系统提供的堆内存是连续的,所以我们只能释放堆末尾的内存,不能释放中间的内存。首先得到我们想要释放的块的header,我们需要得到一个指针。如果想要在堆上分配更多的内存,我们需要请求系统增加 brk,同样的,释放内存的话,需要请求系统减少 brk。原创 2024-08-31 15:23:01 · 1091 阅读 · 0 评论 -
C++中完美转发std::forward的一点点分析
这一节我们分析了的调用流程,一步一步展示了其调用过程。但是还有很重要的一点是:没有提出一个必须要使用的场景,也就是说,学了这么多,不知道在什么时候使用。等日后遇到了补上吧。原创 2024-08-25 19:59:37 · 1339 阅读 · 0 评论 -
关于Hipe并发库中动态线程库DynamicThreadPond的一点解读(四)
向线程池中提交任务,若提交的任务若有返回值时的处理流程大概就是这样,这里再引出一个问题:**若提交的任务既有参数,又有返回值怎么处理?**上一节分析了任务有参数怎么办,这一节分析了任务有返回值怎么办,那么两个结合起来就可以解决这个问题。return x++;线程池如何初始化线程池如何提交任务子线程如何执行任务线程池如何动态增加或减少线程线程池关闭时会做什么任务以何种方式提交,任务如果有参数怎么办,任务如果有返回值什么办,任务如果既有参数又有返回值怎么办?原创 2024-08-22 12:22:00 · 1000 阅读 · 0 评论 -
关于Hipe并发库中动态线程库DynamicThreadPond的一点解读(三)
这一节简单介绍了线程池支持以哪种方式提交任务,任务如果要输入参数怎么解决,整体面貌给大家展现出来了,但是其中还有一些细节问题没有说清,不过不影响理解。下一节我们会介绍当提交的任务有返回值时该怎么处理。原创 2024-08-20 12:09:07 · 475 阅读 · 0 评论 -
关于Hipe并发库中动态线程库DynamicThreadPond的一点解读(二)
以上就是本节的所有内容。然后可以解释下开头的那句话:这里的动态可能和你想的动态不太一样。在我没有阅读代码之前,我一直以为动态减少的那些线程会保存起来,待需要动态增加时,再重新拿出来使用。阅读完代码后,才发现自己理解错了。减少的线程会被join,增加线程时会重新创建线程。原创 2024-08-19 21:35:30 · 725 阅读 · 0 评论 -
关于Hipe并发库中动态线程库DynamicThreadPond的一点解读(一)
SafeTask线程池通过重用线程来减少创建和销毁线程的开销。当有任务时,线程池会从池中取出一个空闲线程来处理任务,而不是每次都创建新线程。在这里,任务可以是一个函数,lambda表达式,函数对象或任何可以调用的对象。一般来说,在使用线程波时,任务通常被封装成可调用的对象,然后添加到任务队列里,等待线程池里的线程执行。SafeTask就是Hipe框架中自定义的任务类型,也就是说所有的任务会被封装成SafeTask类型的对象。被封装为SafeTask// 线程池的任务队列/***/原创 2024-07-30 17:00:51 · 1065 阅读 · 0 评论 -
C++中的函数名与函数名取地址
的相关代码时,遇到了一些疑惑,特意记录下来。运算符本来的意义,它要求其操作数是一个对象。根据上面所讲,此时的。是整个数组的首地址。虽然它两的值相同,但是类型不同。其它情况下会被转化为指向该函数的指针,那么这时的。是没有区别的,那么它们两本质的区别是什么呢?除过上面的两种情况外,还有第三种情况,那就是。是数组名,表示的是整个数组的首地址;的操作数时,它的类型才是函数对象;的值是一样的,那它们的类型一样吗?这个函数对象的地址。可以取得这个函数对象的地址。都可以得到函数的地址,也就是。的类型是函数对象,所以。原创 2024-07-26 14:47:01 · 913 阅读 · 0 评论 -
C++中的万能引用,引用折叠,完美转发
是 C++11 引入的一个标准库函数模板,用于在泛型编程中实现完美转发(perfect forwarding)。这意味着参数的值类别(左值或右值)和所有修饰符(如 const、volatile 等)都能被保留,从而使被调用的函数能够正确处理参数。是一个特殊的引用类型,经常在模版编程中使用。它即可以绑定到左值,也可以绑定到右值,也就是说,使用万能引用的。所有的引用折叠最终都代表一个引用,要么是左值引用,要么是右值引用。时,运用引用折叠的规则,此时。时,运用引用折叠的规则,此时。函数,一次传入的参数是。原创 2024-07-26 11:15:49 · 1939 阅读 · 1 评论 -
C++之static关键字
有int a = 5;/*=======这是重点======*/#endifint main()print();程序说明:在test.h定义了一个int的变量a,我们想在main.cpp中输出这个a,使用gcc进行编译。可以看到是链接期间的错误,多重定义。我们分析下为什么会出现这个错误。首先明白程序编译的过程。将源代码编译为可执行文件有四个阶段:预处理——>编译——>汇编——>链接。define定义的替换,includemain.cpp中include了test.h,编译器会将。原创 2024-07-06 16:04:51 · 1348 阅读 · 0 评论 -
程序中的Reduce(CPU和GPU)
最近在看Reduce(归约)的相关知识和代码,做个总结。这里默认大家已经明白了Reduce的基础概念。原创 2024-06-29 14:42:11 · 555 阅读 · 0 评论 -
C++中unordered_map数据类型添加自定义Struct作为Key
最近在工作中,遇到了要将定义的变量使用自定义的作为key,然后使用int作为value,遇到了一些问题,下面做个简单的总结。原创 2024-04-27 11:34:31 · 1650 阅读 · 0 评论 -
C语言中与内存操作有关的一些函数
最近在使用C语言在开发项目时,要对内存进行操作。刚开始写的时候有一点迷糊,看了一些东西后才发现为什么说,因为它可以对内存直接进行操作,多么帅的事情,真的是太帅了。原创 2024-04-19 18:37:46 · 486 阅读 · 0 评论 -
libtorch中API介绍
这篇博客我们介绍了一些libtorch中tensor的相关操作,请记住:libtorch和pytorch基本上是一一对应,要学会举一反三。原创 2024-04-13 21:09:53 · 1095 阅读 · 0 评论 -
CMake命令介绍
来来回回使用cmake已经多次了,有一些cmake中使用的命令还是比较模糊,这里进行简单地梳理并进行记录。如有问题,欢迎大家指教。原创 2024-04-13 19:17:49 · 1523 阅读 · 0 评论