科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件为C 标准库容器写自己的内存分配程序

为C 标准库容器写自己的内存分配程序

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文给出了C 标准库容器来管理内存的完整内存池管理程序和测试程序的源代码,供大家参考!

作者:佚名 来源:为C 标准库容器写自己的内存分配程序 2007年9月13日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

测试程序的源码如下:

// MyStl.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include <map>

#include <vector>

#include <string>

#include <utility>

#include <iostream>

#include "MyAlloc.h"

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

happyever ::InitShm();

multimap<string,int,less<string>,happyever ::MyAlloc<string> > m;

m.insert(make_pair(string("Harry"), 32));

m.insert(make_pair(string("Mary"), 59));

m.insert(make_pair(string("Roger"), 18));

m.insert(make_pair(string("Nancy"), 37));

m.insert(make_pair(string("Mary"), 23));



typedef multimap<string,int,less<string>,happyever ::MyAlloc<string> >::iterator Iter;

for (Iter p = m.begin(); p != m.end(); p++)

{

cout << p->first << "," << p->second << endl;

}

Iter p = m.find("Harry");

m.erase(p);

/*p = m.find("Harry");

cout << "Harry is: " << p->second << "." << endl;*/

for (Iter p = m.begin(); p != m.end(); p++)

{

cout << p->first << "," << p->second << endl;

}



return 0;

}

以上程序在vs2005,vc6上测试通过。使用MinGW编译的时候只需要去掉vc的预编译头文件#include “stdafx.h”即可。

以上程序只要稍微修改,就可以实现共享内存的管理,可以方便的使用标准库提供的容器。加上信号量的锁机制。

以上为了学习而改写的SGI的stl二级分配算法实现的。以上代码存在一定的局限性。我另外完整实现了共享内存管理的STL标准的alloctor程序,使用posix信号量加锁。目前应用在aix的xlC编译环境下。因为源码涉及公司的商业秘密,所以不能公开。但基本上以上源码已经体现了自己管理内存的完整思路,供这方面需求的朋友一起学习研究用。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章