0

下面是演示代码():

/* 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]));

4

1 回答 1

0

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

于 2014-06-05T02:06:08.107 回答