2019-04-25 15:35
⁄ 工业·编程
⁄ 共 9715字
最近研究高性能C++协程,网上了解到了魅族libgo、腾讯libco、开源libaco、boost coroutine,这里记录一下。
1 什么是协程
协程可以很轻量的在子例程中进行切换,它由程序员进行子例程的调度(即切换)而不像线程那样需要内核参与,同时也省去了内核线程切换的开销,因为一个协程切换保留的就是函数调用栈和当前指令的寄存器,而线程切换需要陷入内核态,...
libaco, libco, libgo, 协程阅读全文
2019-04-24 22:27
⁄ 工业·编程
⁄ 共 4648字
unique_ptr <>是c ++ 11提供的智能指针实现之一,用于防止内存泄漏。unique_ptr对象包含一个原始指针,并负责其生命周期。当这个对象被销毁的时候,它的析构函数会删除关联的原始指针。
unique_ptr有重载的- >和*运算符,所以它可以被用于类似于普通的指针。
示例:
#include <iostream>
#include <memory>
struct Task {
int mId;
Task(int id) : mId(id) {
std::cout ...
C++11, 指针阅读全文
2019-04-23 22:24
⁄ 工业·编程
⁄ 共 3379字
shared_ptr的主要优点是当不再使用时会自动释放相关的内存。
但是如果我们不仔细使用shared_ptr,那么这个优势就会变成一个劣势。 我们来看看:
假设我设计一个二叉树,并在其中包含一个指向左右子节点的指针。
#include <iostream>
#include <memory>
class Node {
int value;
public:
std::shared_ptr<Node> leftPtr;
std::shared_ptr<Node> rightPtr;
Node(int val) :...
C++11阅读全文
2019-04-22 22:16
⁄ 工业·编程
⁄ 共 1177字
1、尽量不要使用相同的原始指针来创建多个shared_ptr对象,因为在这种情况下,不同的shared_ptr对象不会知道它们与其他shared_ptr对象共享指针。
这样会造成什么样的问题?
设想两个shared指针由相同的原始指针创建:
int *rawPtr = new int();
std::shared_ptr<int> ptr_1(rawPtr);
std::shared_ptr<int> ptr_2(rawPtr);
假设ptr_2超出范围,那么它将删除关联的原始指针,这样ptr1就会指向一个悬挂指针。
所以,当...
C++11, 指针阅读全文
2019-04-21 22:12
⁄ 工业·编程
⁄ 共 1062字
++,--和[]操作符
相比于原始指针,shared_ptr只提供这些运算符:
1) ->, *
2) 比较运算符
但是,shared_ptr不提供
1) 指针运算比如+,-,++,--
2) Operator []
例子:
#include <iostream>
#include <memory>
struct Sample {
void dummyFunction() {
std::cout << "dummyFunction" << std::endl;
}
};
int main() {
std::shared_ptr<Sample>...
C++11, 指针阅读全文
2019-04-20 22:07
⁄ 工业·编程
⁄ 共 2332字
当一个shared_ptr对象超出作用域时,其析构函数被调用,在析构函数中,将其引用计数减1,如果引用计数的值变为0,则删除关联的原始指针。
要删除析构函数中的内部原始指针,默认情况下,shared_ptr调用delete()函数,即
delete Pointer;
但是,我们在析构函数中并不总是要使用delete函数,还可能有其他的需求。
如果shared_ptr指向一个数组而不是一个简单的指针
std::shared_ptr<int> p3(new int[12]);
在其析构函数中,s...
C++11, 指针阅读全文
2019-04-19 21:59
⁄ 工业·编程
⁄ 共 2251字
std::shared_ptr<>是c++11中引入的一种智能指针,它足够聪明,如果指针不在任何地方使用,就会自动删除指针。这可以帮助我们彻底消除内存泄露和悬挂指针的问题。
shared_ptr和共享所有权
它遵循共享所有权的概念,即不同的shared_ptr对象可以与相同的指针相关联,并且在内部使用引用计数机制来实现。
每个shared_ptr对象内部指向两块内存区域
1)指向对象
2)指向用于引用计数的控制数据
共享所有权怎样在引用计数的帮助下...
C++11, 指针阅读全文
2019-04-14 21:23
⁄ 工业·编程
⁄ 共 13228字
1.栈
1.1 栈的定义
栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。如下所示:
结论:后进先出(Last In First Out),简称为LIFO线性表。
栈的基本运算有六种:
构造空栈:InitStack(S)、
判栈空: StackEmpty(S)、
判栈满: StackFull(S)、
进栈: Push(S,x)、可形象地理解为压入,这时栈中会多一个元素
退栈: Pop(S) 、 可形象地理解为弹出,弹出后栈中就无此元素了。
取栈顶元素...
数据结构阅读全文
2019-04-07 21:20
⁄ 工业·编程
⁄ 共 8142字
1. 线性表:n个数据元素的有序集合。
线性表是一种常用的数据结构。在实际应用中,线性表都是以栈、队列、字符串、数组等特殊线性表的形式来使用的。由于这些特殊线性表都具有各自的特性,因此,掌握这些特殊线性表的特性,对于数据运算的可靠性和提高操作效率都是至关重要的。 线性表是一个线性结构,它是一个含有n≥0个结点的有限序列,对于其中的结点,有且仅有一个开始结点没有前驱但有一个后继结点,有且仅有一个终端结点没...
数据结构阅读全文
2019-03-31 21:07
⁄ 工业·编程
⁄ 共 10581字
我们在应用程序开发中,一般要求尽量两做到可维护性和可复用性。
应用程序的复用可以提高应用程序的开发效率和质量,节约开发成本,恰当的复用还可以改善系统的可维护性。而在面向对象的设计里面,可维护性复用都是以面向对象设计原则为基础的,这些设计原则首先都是复用的原则,遵循这些设计原则可以有效地提高系统的复用性,同时提高系统的可维护性。 面向对象设计原则和设计模式也是对系统进行合理重构的指导方针。
常用的面...
设计模式阅读全文