tcl_format内存使用情况
Tcl_Format memory usage
这是用C( )编写的TCL的扩展Proc(C 在这里无关紧要 - 我只使用std::vector
)。我使用Tcl_Format
创建一个新的格式字符串。如果我不使用Tcl_DecrRefCount
,则每次将其称为外部Proc时,都会使用越来越多的内存报告:
int TclME::vTestExt(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj* const objv[])
{
Tcl_Obj *resultPtr, *item[1], *itemFormatted;
size_t N;
std::vector<long> v;
populate_v(v);
N = v.size();
resultPtr = Tcl_NewListObj(0, NULL);
for (long i = 0; i < N; ++i) {
item[0] = Tcl_NewLongObj(v[i]);
printf("item[0] ref %i, sh %i; ", item[0]->refCount, Tcl_IsShared(item[0]));
itemFormatted = Tcl_Format(interp, "#%06X", 1, item);
// With Tcl_DecrRefCount commented out, there is a memory leak
printf("tref %i, sh %i; ", item[0]->refCount, Tcl_IsShared(item[0]));
Tcl_DecrRefCount(item[0]);
printf("tref %i, sh %in", item[0]->refCount, Tcl_IsShared(item[0]));
Tcl_ListObjAppendElement(interp, resultPtr, itemFormatted);
}
Tcl_SetObjResult(interp, resultPtr);
return TCL_OK;
}
void populate_v(std::vector<long> &v)
设置向量项目。
输出是item[0] ref 0, sh 0; ref 0, sh 0; ref -1, sh 0
,所以我不必指望手动致电Tcl_DecrRefCount
。
我想念什么?
创建一个新的tcl对象时,其参考count 为0。
当参考计数器下降到 0时,任何TCL对象都将被释放。然后降低在不再使用时再次(例如,在拨打Tcl_Format()
之后)。
在上面的特殊情况下,您可以使用Tcl_ObjPrintf()
:
...
for (long i = 0; i < N; ++i) {
Tcl_ListObjAppendElement(interp, resultPtr, Tcl_ObjPrintf("#%06X", v[i]));
}
...
相关文章:
- 如何在没有死锁和/或争用的情况下正确使用 std::mutex C++?
- 在集合的情况下使用emplace_hint的用例是什么?
- 在没有堆的情况下用两种方法构造对象
- 如何在不中断的情况下正确使用C++中的切换用例语句中的Fallthrough
- 给定一个填充无符号字符**的 C 函数,如何在没有中间副本的情况下用数据填充 std::vector
- 在这种情况下,有没有办法用单个解决方案替换两个仅在类型上不同的相似函数?
- 为什么在一种情况下,我会收到带有字符串文字的已弃用转换警告,而在另一种情况下却没有?
- 不能在没有对象的情况下调用成员函数,但我用对象调用函数
- 在不先显式调用析构函数的情况下,在旧对象上使用placement new是否危险
- 无法在前面有多余空格的情况下获取要打印的数组.只有第一个值会用空格打印
- 在可疑的情况下发出叮当警告:函数'foo'可以用属性"noreturn"声明吗?
- 如何在没有任何JavaScript知识的情况下用PNaCl编写C++HTML5应用程序
- 如何在不使用开关大小写的情况下用C++编写菜单驱动的程序
- 在什么情况下,运算符=应该用左值/右值重载而不是复制和交换来实现
- 在没有测试用例的情况下提升单元测试框架
- 在这种情况下,为函数赋值有什么用
- 如何在没有_setmode的情况下用C++输出unicode
- 如何在没有STL的情况下用c++中的Key创建和访问内存块
- 如何在不锁定文件的情况下用C++编写文件
- clang与gcc运行时的区别:用clang构建的c++类模板在没有复制构造函数的情况下崩溃,用复制构造函数构建的gcc