随笔分类 -  C/C++

摘要:malloc的线程安全 线程安全就是多个线程并发执行相同代码,程序的结果依然是正确的。malloc 由于操作的是堆上的空间,所以如果要实现线程安全,就需要对 malloc 加锁。 malloc 的不可重入性 可重入函数简单来说就是可以被中断的函数,在这个函数执行的任何时刻中断它,转入 OS 调度下去 阅读全文
posted @ 2022-06-30 10:55 Kayden_Cheung 阅读(2174) 评论(0) 推荐(0) 编辑
摘要:template <typename T> class poor_unique_ptr { public: explicit poor_unique_ptr(T* ptr=nullptr): ptr_(ptr) {}; ~poor_unique_ptr() { if (ptr_) { delete 阅读全文
posted @ 2022-06-22 19:52 Kayden_Cheung 阅读(109) 评论(0) 推荐(0) 编辑
摘要:1 C 中的 const 内存分配 1.1 修饰全局变量 #include<stdio.h> const int n = 5; int main(){ int* p = (int*)(&n); *p = 10; printf("%x\n", &n); printf("%x\n", p); print 阅读全文
posted @ 2022-04-18 10:58 Kayden_Cheung 阅读(99) 评论(0) 推荐(0) 编辑
摘要:在 C++11 中,我们可以使用 mutex 来实现线程的同步,mutex 包括上锁和解锁两个步骤。 lock_guard 的功能也是实现线程同步,可以进一步偷懒以及避免在锁定期间可能出现异常的情况,它的思想就是 RAII,在构造对象时就完成上锁的操作,当对象离开作用域时自动调用析构函数解锁。 te 阅读全文
posted @ 2022-04-17 13:29 Kayden_Cheung 阅读(382) 评论(0) 推荐(0) 编辑
摘要:1 auto auto 的功能是类型推断,它使用的是模板类型推导的机制,auto 会被一个虚构的模板类型参数T替代,然后进行推断。 例如下面的 auto x = 5,编译器就会认为它有一个模板 func_for_x,从而去推断出T的类型。 template <typename T> void fun 阅读全文
posted @ 2022-03-24 14:26 Kayden_Cheung 阅读(84) 评论(0) 推荐(0) 编辑
摘要:修饰普通变量:改变变量的存储区域和生存周期,变量保存在静态区。 修饰普通函数:该函数仅在定义该函数的文件内使用,在不想其他文件使用的情况下可以加static。 修饰成员变量:不管声明多少个实例,都使用同一份变量。 修饰成员函数:不需要生成对象就可以使用该函数。 阅读全文
posted @ 2022-03-22 22:33 Kayden_Cheung 阅读(30) 评论(0) 推荐(0) 编辑
摘要:#include<iostream> class SharedCount{ public: SharedCount():count_(1){} void AddCount(){ ++count_; } long ReduceCount(){ return --count_; } long GetCo 阅读全文
posted @ 2022-03-20 17:00 Kayden_Cheung 阅读(177) 评论(0) 推荐(0) 编辑
摘要:1 _Ptr_base _Ptr_base 是智能指针的基类,它包含两个成员变量:指向目标元素的指针 _Ptr 和 引用计数基类指针 _Rep。 private: element_type * _Ptr{nullptr}; _Ref_count_base * _Rep{nullptr}; 1.1 e 阅读全文
posted @ 2022-03-09 20:00 Kayden_Cheung 阅读(128) 评论(0) 推荐(0) 编辑
摘要:左值、右值 1 左值是表达式结束后依然存在的持久对象。 2 右值是表达式结束后不再存在的临时对象。 简单来说,能取地址的是左值,否则就是右值。 右值引用的意义 实现移动语义和完美转发。 移动语义:可以用廉价的移动操作来代替昂贵的拷贝操作。 完美转发:将实参转发到其他的函数,使目标函数接收到的实参与被 阅读全文
posted @ 2022-02-25 09:58 Kayden_Cheung 阅读(108) 评论(0) 推荐(0) 编辑
摘要:什么是内存池? 在上一篇 C++内存管理:new / delete 和 cookie 中谈到,频繁的调用 malloc 会影响运行效率以及产生额外的 cookie, 而内存池的思想是预先申请一大块内存,当有内存申请需求时,从内存池中取出一块内存分配给目标对象。 它的实现过程为: 预先申请 chunk 阅读全文
posted @ 2021-12-13 20:27 Kayden_Cheung 阅读(659) 评论(0) 推荐(0) 编辑
摘要:new 和 delete C++的内存申请和释放是通过 new 和 delete 实现的, 而new 和 delete 其实就是通过 malloc 和 free 实现的。 new 申请内存分为三个步骤: 调用 operator new 函数分配目标类型的内存大小,operator new 函数内部就 阅读全文
posted @ 2021-12-13 14:20 Kayden_Cheung 阅读(637) 评论(0) 推荐(0) 编辑
摘要:代码就是侯捷老师的代码,包括了最基础的构造函数、拷贝构造函数和拷贝赋值函数。 String.h #pragma once #include<string.h> #ifndef STRING_H #define STRING_H class String { public: String(const 阅读全文
posted @ 2021-09-19 21:55 Kayden_Cheung 阅读(91) 评论(0) 推荐(0) 编辑
摘要:char * strcpy( char *strDest, const char *strSrc ) { assert((strDest != NULL)&&(strSrc != NULL)); char *address = strDest; while( (*strDest++ = * strS 阅读全文
posted @ 2019-02-26 15:50 Kayden_Cheung 阅读(336) 评论(0) 推荐(0) 编辑

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