20140506 visio 画布大小 栈实现队列 堆空闲内存地址链表 堆最大可分配的内存 可用内存链表


1、调整visio的画布大小

按住Ctrl鼠标移动到画布边缘即可

2、两个栈实现一个队列

一个栈用于入队,一个用于出队

20111122200217730

#include<iostream>
#include<stack>
using namespace std;
template<class T>
struct MyQueue
{
    void push(T &t)    //入队操作,通过s1实现
    {
        s1.push(t);
    }
    T front()     //作用是把栈s1中的元素压入栈s2
    {
        if(s2.empty())
        {
            if(s1.size()==0) throw;
            while(!s1.empty())
            {
                s2.push(s1.top());
                s1.pop();
            }
        }
        return s2.top();
    }
    void pop()  //从s2出栈
    {
        if(s2.empty())
        {
            while(!s1.empty())
            {
                s2.push(s1.top());
                s1.pop();
            }
        }
        if(!s2.empty())
        {
            s2.pop();
        }
    }
    stack<int> s1;
    stack<int> s2;
};

int main()
{
    MyQueue<int> mq;
    int i;
    for(i=0;i<10;i++)
    {
        mq.push(i);
    } 
    for(i=0;i<10;i++)
    {
        cout<<mq.front()<<endl;
        mq.pop();
    }
    system("pause");
    return 0;
}

3、堆,空闲内存地址链表链表

http://blog.csdn.net/luckyxiaoqiang/article/details/8669602

比如我要分配80个字节,现在有两个相邻的空闲块,每块50字节,假设没有其他空闲块,这样内部分配函数第一次调用找不到满足要求的块,失败,这时我们要调用合并空闲块函数,将连续的空闲块合并成一个大的空闲块,之后再次调用内部分配函数,所以用一个外部内存分配函数把这些过程封装起来。还有一种空闲块合并策略,就是立即合并,每次释放的时候要检查前后有没有空闲块,当然也需要其他的一些信息,这些《深入理解计算机系统》里都有讲到。

《深入理解计算机系统》

4、关于堆最大可以分配的内存(win7 32位的对内存连1.6G都分配不了)

32位的系统能操作的地址空间只有2的32次,也就是4G,所以无论虚拟空间多大,堆最大能分配多大。

#include<stdio.h>//win7 32位的对内存连1.6G都分配不了
void main()
{
    int *Test=new int[1024*1024*200];//分配800M=4B*(200*1024*1024)=4B*(200*1K*1K)=4B*(200*1M)=4B*200*1M=800MB内存
    int* Test2=new int[1024*1024*200];// 分配800M内存
}

image

malloc返回的地址只是逻辑地址空间的一个地址值。在使用该地址的时候才由操作系统映射到物理内存去访问内存数据。不存在malloc直接返回物理内存的说法。即使用VirtualAlloc分配的虚拟内存,提交以后还不是照样要分配物理内存。知道使用的地址是逻辑空间地址,使用该地址的时候由操作系统做映射到物理内存的动作就可以了

5、可用内存空间链表

http://zhidao.baidu.com/link?url=fu7LNzkSXtrNvhdm_0-DrHx4AskV90fTCmEqJHTHW2wlPGbgp9j9QEeq7mk1mmAyOkqoRqf_ED2bldtU0WsEpq


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM