//本例中演示了malloc分配大内存并遍历计算,直接操作内存,暴力快速。
//malloc分配的内存比起数组的内存大(数组的长度达到一定的时候会报错)。
//在图像处理等测控仪表等场合有实用价值
//这都还没用并行处理,比如openMP等技术
//在密集计算情况,用c++有无与伦比的优势,
#include <iostream>
int main()
{
//getchar();//观察内存使用
const int m = 200000000;//与计算机内存大小和X86/X64有关
//const int m = 500000000//如果是X64,把上行注释掉,取消本行注释
void * a = malloc(m*4);//申请内存,因为是整型,所以需要m*4字节
//void* b = malloc(m * sizeof(int));//上行换成这行更好,申请内存
int * a1= (int *) a;//强制转换为整型指针,等下还要用
void* b = malloc(m * 4);//申请内存,因为是整型,所以需要m*4字节
int* b1 = (int*)b;//强制转换为整型指针,等下还要用
printf("start\n");
for (int i = 0; i <m; i++)
{
*a1 = i;
a1++;
}
a1--;//退回到最后一个,要不然下行跑到非法地址了
printf("%d\n", *a1);
a1= (int*)a;//恢复指针,要不然下面的循环中a1跑到非法地址了
for (int i = 0; i < m; i++)
{
*b1 =(*a1)*3 ;
a1++;
b1++;
}
b1--;//退回到最后一个,要不然下行跑到非法地址了
printf("%d\n", *b1);
printf("calc ok\n");
//getchar();//;//观察内存使用
free(a);//释放内存
//getchar();//观察内存使用
free(b);//释放内存
getchar();
return 0;
}