class A ;A a ;
A* b = new A() ;变量a为栈变量,b为堆变量。a不能跨线程传递,因为不能确保传递a的线程
在传递结束后是否退出(a的生存期不确定);但b可以。问题:
如何确定一个变量是堆类型还是栈类型,因为如果需要传递一个实例到另外
一个线程,在无法确定其是否为堆变量的情况下,如:
void MyThreadProc()
{
A a ;
A* b = new A() ; CallOtherThread(&a) ;
CallOtherThread(b) ;
}
对CallOtherThread来说如何区别这个对像是堆变量还是栈变量就很重要,否
则只能所有的都进行克隆,而如果这个对像是一个相当复杂的复合对像,其
开销也将相当大。提问:是否有API或其它手段来(如通过内存地址的值)来判断一个实例是堆
实例还是栈实例???验证可行立即给分!!!!
A* b = new A() ;变量a为栈变量,b为堆变量。a不能跨线程传递,因为不能确保传递a的线程
在传递结束后是否退出(a的生存期不确定);但b可以。问题:
如何确定一个变量是堆类型还是栈类型,因为如果需要传递一个实例到另外
一个线程,在无法确定其是否为堆变量的情况下,如:
void MyThreadProc()
{
A a ;
A* b = new A() ; CallOtherThread(&a) ;
CallOtherThread(b) ;
}
对CallOtherThread来说如何区别这个对像是堆变量还是栈变量就很重要,否
则只能所有的都进行克隆,而如果这个对像是一个相当复杂的复合对像,其
开销也将相当大。提问:是否有API或其它手段来(如通过内存地址的值)来判断一个实例是堆
实例还是栈实例???验证可行立即给分!!!!
解决方案 »
- 如何获取内存里某一进程的某一对象指针??
- 请问如何根据文件句柄得到文件名和路径信息?
- 对话框中的CSpinButtonCtrl控件不响应 WM_LBUTTONUP事件 怎么办??
- 请教有关 (MFCN42D.DLL) Oxc0000005:Access Violation的问题,谢谢
- 关于画图的问题,
- 有人说.NET会取代COM, 对错咱们暂且不论, .NET里有什么机制是类似COM的?
- unsigned char 变量值的显示
- 如何让VC调用到VB生成的ActiveX DLL中的函数?小弟先谢过了!
- 各位大侠,帮帮我吧!
- 怎么将十进制的区位码转换成汉字?
- 如何自定义消息啊?求sdk的解决办法
- 刚才的问题有点歧意,应该是怎样通过广播地址发数据!!
void CallOtherThread(A obj);
void CallOtherThread(A *obj);然后调用的时候总是直接写CallOtherThread(a),千万不要写&a *a之类的就行了。
void onstack(void *o)
{
if (&o < o)
printf ("on stack\n");
else
printf ("not on stack\n");
}不过静态数据和堆数据不好区分。
{
int i = 0 ;
onstack(&i) ;
int* j = new int ;
onstack(j) ;
getchar() ;
return 0;
}很遗憾,验证未通过,两个都打印出"on stack"
{
static void *p;
if (!p) p = o;
if (o <= p)
printf ("on stack\n");
else
printf ("not on stack\n");
}void test2()
{
int i = 0 ;
onstack(&i) ;
int* j = new int ;
onstack(j);
}int main()
{
int i = 0 ;
onstack(&i);
int* j = new int ;
onstack(j);
test2();
int k = 0;
onstack(&k);
getchar() ;
return 0;
}
当然,这里需要在主函数内用第一个栈变量初始化onstack里面的p;