c语言,操作电脑内存问题 希望指定内存的地址,存进去数据,然后再从这个内存地址读出来数据。。。
c语言,操作电脑内存问题希望指定内存的地址,存进去数据,然后再从这个内存地址读出来数据。。。求高手指点,速度哦,先到先得...
c语言,操作电脑内存问题
希望指定内存的地址,存进去数据,然后再从这个内存地址读出来数据。。。
求高手指点,速度哦,先到先得 展开
希望指定内存的地址,存进去数据,然后再从这个内存地址读出来数据。。。
求高手指点,速度哦,先到先得 展开
1个回答
展开全部
c的malloc无法指定地址分配内存的。用c++的new操作符可以指定地址分配:
class A
{
int a;
int b;
public: A(int x=123,int y=321):a(x),b(y)
{
cout << "In A()" << endl;
}
public: ~A()
{
cout << "In ~A()" << endl;
}
};
int main()
{
unsigned char mem[sizeof(A)];
int *p=(int*)mem;
cout << *p << endl;
cout << *(p+1) << endl;
new(mem)A();
cout << *p << endl;
cout << *(p+1) << endl;
return 0;
}
这上边的new操作符就是指定地址分配内存。
C语言如果不是指定内存的话可以这样:
int *p = (int*)malloc(sizeof(int));//分配内存
*p = 38;//往内存存值
printf("value:%d\n", *p);//打印出指针p指向的整形值
free(p);//释放内存
class A
{
int a;
int b;
public: A(int x=123,int y=321):a(x),b(y)
{
cout << "In A()" << endl;
}
public: ~A()
{
cout << "In ~A()" << endl;
}
};
int main()
{
unsigned char mem[sizeof(A)];
int *p=(int*)mem;
cout << *p << endl;
cout << *(p+1) << endl;
new(mem)A();
cout << *p << endl;
cout << *(p+1) << endl;
return 0;
}
这上边的new操作符就是指定地址分配内存。
C语言如果不是指定内存的话可以这样:
int *p = (int*)malloc(sizeof(int));//分配内存
*p = 38;//往内存存值
printf("value:%d\n", *p);//打印出指针p指向的整形值
free(p);//释放内存
更多追问追答
追问
就算不能指定,可以用一个小程序往内存里存数,在另一个小程序中读那个数吗?
追答
现代操作系统采用虚拟进程空间来分割不同进程的内存地址。因此不同程序看到相同的地址其实在物理内存中的映射是完全不一样的。因此不可以在一个小程序里存数,在另一个内存里读数。
另外,操作系统一般都提供了共享内存,管道或其他类似手段,可以用来在不同进程里通信,在这种情况下不同程序可以相互读写。不过这属于操作系统的系统调用范畴,与c语言学习理解不一样。
快又稳
2024-10-28 广告
2024-10-28 广告
在Linux环境下配置基于域名的虚拟主机,需安装Apache或Nginx等Web服务器,并编辑配置文件。以Apache为例,需创建虚拟主机配置文件,指定域名、文档根目录等,然后启用该配置文件并重启Apache服务。同样,Nginx也需在相应...
点击进入详情页
本回答由快又稳提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询