【问题标题】:what is the purpose of "(jlong)(ptrdiff_t)(void*)" in heapViewer.c(a JVMTI Demo)?heapViewer.c(JVMTI Demo)中“(jlong​​)(ptrdiff_t)(void *)”的目的是什么?
【发布时间】:2014-06-04 02:09:51
【问题描述】:

下面是演示代码():

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

【问题讨论】:

    标签: heap-dump jvmti


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2021-04-21
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      • 2012-05-11
      • 2023-03-16
      • 1970-01-01
      • 2017-04-29
      • 1970-01-01
      相关资源
      最近更新 更多