我正在测试一些使用指针算法的代码,但我不明白我得到什么格式的大小。 我假设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;
您的代码表现出不确定的行为。减去两个指针只有在指向同一个数组时才有意义(在这种情况下,差异是它们之间的距离,数组元素的数量)。 – 2015-02-10 14:58:10
'new'的结果是不可预测的。 'sum'可以是任何东西。 – molbdnilo 2015-02-10 15:18:22