在 heapViewer.c(一个 JVMTI 演示)中"(jlong)(ptrdiff_t)(void*)"的目的是什么?



下面是演示代码():

/* Typedef to hold class details */
typedef struct {
     char *signature;
     int   count;
     int   space;
 } ClassDetails;
 ....
/* Tag this jclass */
err = (*jvmti)->SetTag(jvmti, classes[i], (jlong)(ptrdiff_t)(void*)(&details[i]));

SetTag的原型是jvmtiError SetTag(jvmtiEnv* env, jobject object, jlong tag) .

我可以这样用吗?err = (*jvmti)->SetTag(jvmti, classes[i], (jlong)(&details[i])); ?

当使用指针类型的标记时,使用ptrdiff_t(用于保存指针差异的整数的标准C类型定义)强制转换为以避免编译器警告和错误。永远不要使用int或long,你会发现int和long并不总是大到足以容纳一个指针,截断你的地址,其中ptrdiff_t总是大到足以容纳指针的所有位。详细信息在这里JVMPI转换到JVMTI

相关内容

最新更新