13.44 编写标准库string类的简化版本,命名String。你的类应该至少有一个默认构造函数和一个接受C风格字符串指针参数的构造函数。使用allocator为你的String类分配所需内存。13.47 添加拷贝构造函数和拷贝赋值运算符,并添加打印语句,则每次函数执行时打印一条信息。13.48 ...
分类:
其他好文 时间:
2014-08-24 16:41:22
阅读次数:
276
13.39 编写自己的StrVec,包括自己版本的reserve、capacity和resize。13.40 为StrVec添加一个构造函数,它接受一个initializer_list参数StrVec.h#ifndef STRVEC_H#define STRVEC_H#include#include...
分类:
其他好文 时间:
2014-08-24 12:49:42
阅读次数:
163
C++为我们提供了安全的内存空间申请方式与释放方式,但是new与delete表达式却是把空间的分配回收与对象的构建销毁紧紧的关联在一起。实际上,作为与C语言兼容的语言,C++也为我们提供了更加底层的内存操作方式的。
谈C++就离不开STL,考虑一下vector
template class T>
void Vector::push_back(const T& t)
{
// are w...
分类:
编程语言 时间:
2014-08-09 00:14:07
阅读次数:
409
上篇简单介绍了gcc4.8提供的几种allocator的实现方法和作用,这是所有stl组件的基础,容器必须通过allocator申请分配内存和释放内存,至于底层是直接分配释放内存还是使用内存池等方法就不是组件需要考虑的事情。这篇文章开始分析gcc4.8 stl的容器源码实现。stl的容器分为序列式容...
分类:
其他好文 时间:
2014-08-03 17:33:55
阅读次数:
270
2014年7月29日 buddy分配算法
内核需要为分配一组连续的页框提供一种健壮、高效的分配策略。分配连续的页框必须解决内存管理中的外碎片(external fragmentation)。频繁的请求和释放不同大小的一组连续页框,必然导致分配页框的块分算来许多小块的空闲页框无法被一次性大量分配使用。
linux内核采用著名的伙伴系统算法来解决外碎片问题。该算法的核心思想是把所有的空闲页框分成1...
分类:
系统相关 时间:
2014-07-30 01:04:12
阅读次数:
378
/*
Easier Done Than Said?
Problem DescriptionPassword security is a tricky thing. Users prefer simple passwords
that are easy to remember (like buddy), but such passwords are often insecure. Some...
分类:
其他好文 时间:
2014-07-29 14:40:28
阅读次数:
288
/*
Easier Done Than Said?
Problem DescriptionPassword security is a tricky thing. Users prefer simple passwords
that are easy to remember (like buddy), but such passwords are often insecure. Some...
分类:
其他好文 时间:
2014-07-29 14:39:48
阅读次数:
302
heap block 引发的思考
问题背景:
Implicit Free Lists
Any practical allocator needs some data structure that allows it to distinguish block boundaries and to distinguish between allo...
分类:
其他好文 时间:
2014-07-27 23:38:29
阅读次数:
452
allocator封装了stl标准程序库的内存管理系统,标准库的string,容器,算法和部分iostream都是通过allocator分配和释放内存的。标准库的组件有一个参数指定使用的allocator类,比如vector的原型是:template >class vector : protecte...
分类:
其他好文 时间:
2014-07-25 02:31:04
阅读次数:
201
动态数组
C++语言定义了另外一种new表达式语法,可以分配并初始化一个对象数组。标准库中包含
一个名为allocator的类,允许我们将分配和初始化分离。
12.2.1 new和数组
void fun1()
{
int *pia=new int[2]; //pia指向第一个int
//方括号中的大小必须是整型,但不必是常量
typedef int arrT[42...
分类:
编程语言 时间:
2014-07-10 19:39:17
阅读次数:
336