【ThinkingInC++】64、重载new和delete,来模仿内存的分配

/**
* 书本:【ThinkingInC++】
* 功能:重载new和delete。来模仿内存的分配
* 时间:2014年10月5日14:30:11
* 作者:cutter_point
*/

#include <cstddef>  //size_t这个类型的使用
#include <fstream>
#include <iostream>
#include <new>

using namespace std;

ofstream out("Framis.txt");

class Framis
{
    enum {sz=10};
    static unsigned char pool[];    //这个用力模仿内存池
    static bool alloc_map[];    //这个是用来标记已经分配或是没有分配的内存
public:
    enum {psize=100};
    Framis() {out<<"Framis()\n";}
    ~Framis() {out<<"~Framis()...";}
    void* operator new(size_t) throw(bad_alloc);    //异常在这里不做多说。后面会专门学习
    void operator delete(void*);

};

unsigned char Framis::pool[psize*sizeof(Framis)];   //这个给内存池设定初始能存放的对象个数
bool Framis::alloc_map[psize]={false};  //所有初始化为没有被分配,false

void* Framis::operator new(size_t) throw(bad_alloc)
{
    for(int i=0 ; i<psize ; ++i)
        if(!alloc_map[i])   //直到遇到第一块没有被分配的空间
        {
            alloc_map[i]=true;  //标记这块空间已经被使用了
            return pool+(i*sizeof(Framis)); //返回分配到哪里了
        }
    out<<"超出内存"<<endl;
    throw bad_alloc();  //抛出异常
}

void Framis::operator delete(void* m)
{
    if(!m) return;
    unsigned long block=(unsigned long)m-(unsigned long)pool;   //m减去起始的地方表示内存的大小
    block /=sizeof(Framis); //一共同拥有几个对象要回收
    out<<"freeing block "<<block<<endl;
    alloc_map[block]=false; //回收要重置为false
}

int main()
{
    Framis* f[Framis::psize];
    try
    {
        for(int i=0 ; i<Framis::psize ; ++i)
            f[i]=new Framis;
        new Framis;
    }
    catch(bad_alloc)
    {
        cerr<<"超出内存"<<endl;
    }

    delete f[10];
    f[10]=0;
    Framis* x=new Framis;
    delete x;   //这里回收的会是f[10] ,后面就不会回收10了
    for(int j=0 ; j<Framis::psize ; ++j)
        delete f[j];

    return 0;
}



转载于:https://www.cnblogs.com/lcchuguo/p/5258894.html

内容概要:本文针对高比例清洁能源接入背景下配电网重构的关键问题,结合需求响应机制开展深入研究,以IEEE33节点标准系统为算例,采用Matlab进行建模与仿真分析。研究充分考虑风电、光伏等分布式电源出力的不确定性特征以及需求侧响应对系统运行的影响,构建了以降低网络损耗、改善电压质量、提升清洁能源消纳能力为目标的优化模型。通过引入智能优化算法求解网络中最优的开关操作策略,实现配电网拓扑结构的动态重构,并通过仿真结果验证了所提方法在增强系统灵活性、可靠性经济性方面的有效性与优越性。; 适合人群:具备电力系统分析、优化理论基础及Matlab编程能力,从事新能源并网、智能配电网、需求响应、分布式能源管理等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于高渗透率可再生能源接入的主动配电网运行优化;②支撑需求响应机制下电网灵活性资源的协同调控研究;③为现代低碳、高效、自愈型智能配电网的规划与运行提供技术路径与决策支持。; 阅读建议:建议读者结合文中提供的Matlab代码与IEEE33节点系统参数进行实践复现,深入掌握配电网重构的数学建模方法、约束处理技巧及智能算法求解流程,同时可进一步拓展至多目标优化、不确定性建模(如鲁棒优化、分布鲁棒优化)及动态重构等前沿方向的研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值