
编程语言
ArionHill
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
注意:需要留意的函数
snprintf int snprintf ( char * s, size_t n, const char * format, ... ); 该函数的返回值仅可用于判断函数是否执行成功,其大小不能代表s的大小 可以分情况讨论 s < format的长度时 n <= s的长度时:format能够截断至n-1的长度进行拷贝到s并添加结束符\0; 返回值却为format的长度。strlen(s)为n-1;sizeof(s)为s的本身字节数(sizeof所有情况都一样) n > s的长度时:原创 2021-05-20 17:08:32 · 132 阅读 · 0 评论 -
c++中的多线程锁
std::mutex my_mutex; my_mutex.lock(); my_mutex.unlock(); std::mutex my_mutex; std::lock_guard<std::mutex> mtx_guard(my_mutex); std::mutex my_mutex; my_mutex.lock(); // std::adopt_lock不会重复加锁my_mutex,my_mutex依旧会在mtx_guard析构时解锁 std::lock_guard<std:原创 2021-05-05 11:08:12 · 372 阅读 · 0 评论 -
C++内存分段的叫法
最细分:代码段(.text)、只读数据段(.rodata)、读写数据段(.rwdata)、未初始化数据段(.bss)、栈区、共享内存区、堆区 其它一些叫法: 静态区(代码段、只读数据段、读写数据段、未初始化数据段)和动态区(栈区、堆区) 只读代码段(代码段、只读数据段) data段(只读数据段和读写数据段) 全局/静态区(data段和bss段) ...原创 2019-09-07 15:19:34 · 692 阅读 · 0 评论 -
构造函数,析构函数,运行时多态
#include <iostream> using namespace std; class A { public: A() { f(); // 构造函数中无运行时多态,输出A::f() } virtual void f() { cout << "A::f()" << endl; } ...原创 2019-08-07 08:09:27 · 232 阅读 · 0 评论 -
列表初始化(initialization list)与赋值(assignment)
哪些情况只能用 initialization list,而不能用 assignment const 和 reference类型成员变量,由于只能被初始化而不能做赋值操作,因此只能用初始化列表 类的构造函数需要调用基类的构造函数时 class Base { private: int a; public: Base(){} Base(int i): a(i){} void print...原创 2019-07-27 08:47:16 · 1233 阅读 · 0 评论 -
c中几个函数的实现 strcpy、memcpy、memmove、memset
函数原型: char* strcpy(char *dst, const char *src); char* memcpy(void *dst, const void *src, const size_t len); char* memmove(void *dst, const void *src, const size_t len); char* memset(void *dst, const i...原创 2019-08-05 10:42:30 · 185 阅读 · 0 评论 -
C++中的特殊成员函数——拷贝、移动、赋值、销毁
class Foo { Foo(); // 默认构造函数 Foo(const Foo); // 拷贝构造函数 Foo& operator=(const Foo&); // 赋值运算符 }; 拷贝构造函数 如果没有自己定义,编译器会自行定义 拷贝初始化 string dots(10, ','); // 直接初始化 string s(dots); ...原创 2019-08-04 09:29:55 · 470 阅读 · 0 评论 -
new,delete 操作符
new operator = operator new + 构造函数 delete operator = 析构函数 + operator delete new operator是由语言内建的,如sizeof一样,不能被改变意义,总是做相同的事。它的动作分为两方面: 分配足够的内存,用来放置某类型的对象。 调用一个constructor,为分配的内存中的对象设定初值。 这两件事是无法改变的 st...原创 2019-07-29 16:23:12 · 205 阅读 · 0 评论 -
C++多态
运行期多态 编译期多态 虚函数表的位置: 类中的函数和普通函数一样存储在代码段(.text)。虚函数应该存储在代码段。虚函数表是构造函数执行时创建的,应该放在只读数据段(.rodata)。 ...原创 2019-07-19 08:58:32 · 190 阅读 · 0 评论 -
empty class对象空间开销--空白基类优化
#include <iostream> class Empty{ }; class Nonempty{ int i; }; class Ce{ int x; Empty e; }; class De1: public Empty{ int x; }; class De2: private Empty{ int x; }; class Cne...原创 2019-07-16 15:04:08 · 204 阅读 · 0 评论 -
C++内存管理与Python垃圾回收机制
C++的内存管理方式 STL的allocator,最新版本默认使用的分配器 C++的内存管理方式: 在c++中内存主要分为5个存储区: 栈(Stack):局部变量,函数参数等存储在该区,由编译器自动分配和释放.栈属于计算机系统的数据结构,进栈出栈有相应的计算机指令支持,而且分配专门的寄存器存储栈的地址,效率分高,内存空间是连续的,但栈的内存空间有限。 堆(Heap):需要程序员手动分配和释...转载 2019-05-30 16:11:10 · 686 阅读 · 0 评论 -
Python垃圾回收机制
Garbage Collection(GC) Python 主要采用引用计数的GC机制,为解决循环引用问题,引入标记-清除和分代回收 引用计数优缺点 优点 简单 实时性:一旦没了引用内存就直接释放了。处理回收的时间分摊到了平时。 缺点 维护引用计数消耗资源 循环引用 ...原创 2019-04-23 14:20:44 · 157 阅读 · 0 评论 -
动态内存与智能指针
智能指针的行为类似常规指针,重要的区别是它负责自动释放所指向的对象。新标准库提供的两种智能指针的区别在于管理底层指针的方式:shared_ptr允许多个指针指向同一个对象;unique_ptr则独占所指向的对象。标准库定义的weak_ptr伴随类,是一种弱引用,它指向shared_ptr所管理的对象。 1.shared_ptr shared_ptr 和 unique_ptr都支持的操作: sha...原创 2019-04-09 10:25:09 · 200 阅读 · 0 评论 -
c语言中的变参问题
VARL VAR_LIST是C语言中解决变参问题的一组宏,在 用法: 定义va_list型变量,该变量是指向参数的指针 用va_start宏初始化刚定义的var_list变量, 这个宏的第二参数是第一个可变参数的前一个参数,是一个固定的参数 用va_arg返回可变的参数,va_arg的第二个参数是你要返回的参数的类型 用va_end宏结束可变参数的获取。然后你就可以在函数里使用第二个参数了...原创 2018-07-03 09:24:55 · 462 阅读 · 0 评论 -
Python协程——流畅的Python
协程是指一个过程,这个过程与调用方协作,产出由调用方提供的值。 1.1、用作协程的生成器的基本行为 >>> def simple_coro2(a): ... print('-> Started: a =', a) ... b = yield a ... print('-> Received: b =', b) ... c = y...原创 2018-05-04 22:10:56 · 652 阅读 · 0 评论 -
Python装饰器
概念 函数装饰器概念与作用:函数装饰器是可调用的对象,其参数是另一个函数。装饰器可能会处理被装饰的函数,然后把它返回,或者将其替换成另一个函数或可调用对象。函数装饰器用于在源码中“标记”函数,以某种方式增强函数的行为,例如:插入日志、性能测试、事务处理、权限校验等。 1、函数装饰器 1.1 函数的函数装饰器的一个例子 def decorator(func): def wra...原创 2018-05-02 22:14:14 · 194 阅读 · 0 评论 -
Python的Queue
# 创建一个“队列”对象 import Queue myqueue = Queue.Queue(maxsize = 10) Queue.Queue类即是一个队列的同步实现。队列长度可为无限或者有限。可通过Queue的构造函数的可选参数maxsize来设定队列长度。如果maxsize小于1就表示队列长度无限。 将一个值放入队列中 myqueue.put(10) 调用队列对象的put()方...转载 2017-03-18 09:37:38 · 436 阅读 · 0 评论 -
python 内置函数 vars(),dirs(), globals(), locals()
dir():函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法dir(),该方法将被调用。如果参数不包含dir(),该方法将最大限度地收集参数信息。 vars():默认打印当前模块的所有属性和属性值,如果传一个对象参数则打印当前对象的属性和属性值 globals():以字典类型返回当前位置的全部全局变量。 locals():会以字典类...原创 2018-01-29 19:07:07 · 522 阅读 · 0 评论