簡體   English   中英

指針地址之間的差異

[英]Difference between pointer address

我正在使用指針算法測試一些代碼,但是我不明白我以什么格式得到大小。 我假設sizeof給我以機器字為單位的大小(char == 1個機器字的大小),但是返回的指針地址之間的區別是什么?

我正在使用VS2008和x64 win7和x64編譯器。

void test_pointer_delta()
{
    int sum=0;
    int n= 100000;
    for(int i=0;i<n;++i)
    {
        char* p1= new char;
        char* p2= new char;
        sum += p2-p1;
    }
    double dp= (double)sum/n; //~64
    int sz= sizeof(char);//1
    int p_sz= sizeof(char*);//8
    printf("diff: %f \n",dp);
}

什么是64? 64位? (那么x64系統上的字長是64位嗎?)

編輯:我想使用此“技巧”來測試向量使用了多少內存,因為似乎不是釋放所有內存(根據任務管理器剩余少量內存),這里是測試代碼:

void test_containers()
{   
    int N=1000*1000;

    int temp= 10;
    clock_t t;

    //for(int i=0;i<100;++i)
    {
        t= clock();
        //vector
        std::vector<int> vec;
        for(int i=0;i<N;++i)
        {
            vec.push_back(temp);
        }
        t= clock()-t;
        printf("vec: %d tics , %f sec \n",t, ((float)t)/CLOCKS_PER_SEC);

        //clear vec
        t= clock();
        vec.clear(); //not frees memory of vector just makes size = 0
        std::vector<int>(vec).swap(vec); //swap trick frees memory
        t= clock()-t;
        printf("vec clear: %d tics , %f sec \n",t, ((float)t)/CLOCKS_PER_SEC);

        int c= vec.capacity();
        int sz= vec.size(); 
    }
}

    //assume dp1 should be the same as dp2
    char* p1 = new char;
    char* p2 = new char;
    int dp1= p2-p1;
    test_containers();
    char* p3= new char;
    int dp2= p3-p2;

我認為,如果您嘗試使用此代碼,將會得到答案:

char s[10];
char *p1 = &s[0];
char *p2 = &s[1];
std::cout << p2 - p1;

減去兩個指針的結果類型為: std :: ptrdiff_t 兩個指針T *之差的單位是T個元素的數量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM