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