AIX:_snw(无符号长)中的malloc
AIX: malloc in _snw(unsigned long)?
我正在尝试在AIX的测试程序中跟踪malloc分配。因此,我用调用旧系统 malloc 的new_malloc替换了 malloc,然后使用对 system("procstack pid") 的调用打印出调用堆栈。奇怪的是,在某些电话中,我得到这个:
0x09000000000ae23c waitpid(??, ??, ??) + 0x190
0x090000000018d8e0 system(??) + 0x1fc
0x0000000100011a34 PrintCallStack__()() + 0x34
0x000000010000167c malloc(0x80) + 0x3c
0x0000000100011acc __snw(unsigned long)(0x80) + 0x4c
0x0000000100011eac __svn(unsigned long)(0x80) + 0x4c
0x000000010000ac84 main(0x100000001, 0xffffffffffff568) + 0xc4
0x00000001000002d8 __start() + 0x98
__snw(无符号长)和__svn(无符号长)呼叫来自什么,它们(意外地)调用malloc?它们似乎发生在 malloc 之后但在 printf 之前。
我的测试代码:
char* y = (char*) malloc(128);
memset(y, 0, 128);
memset(y, 'Z', 15);
printf("y=%s %pn", y, y);
free(y);
这并不能回答这个问题,但它确实(我希望)教授了一些技巧。
我做了:
ls /usr/lib/*.a | while read lib ; do echo $lib ; nm $lib 2>/dev/null| egrep '__svn|__snw' ; done
这向我表明这些来自 libC.a。 然后我做了:
mkdir /tmp/dog
cd /tmp/dog
ar x /usr/lib/libC.a
for i in * ; do echo $i ; nm $i 2> /dev/null | egrep '__svn|__snw' ; done
这表明它来自ansicore_32.o
lslpp -w /usr/lib/libC.a
告诉我它来自xlC.rte - 它来自编译器的人。
所以......没有直接回答你的问题,但这似乎与C++有关。 使用 C 程序运行测试会很好奇。 C++有各种各样的奇怪之处,它被称为malloc也就不足为奇了。 我仍然对我之前的问题感到困惑。 如果你有一个名为new_malloc的东西,为什么预编译实体会开始使用它?
最后,关于你更大的问题,AIX 的 malloc 有很多功能。 它们不一定是我的推荐。 我是一个内核空间的人,而不是一个应用程序空间类型的人。 我用得很少,我感到沮丧。 但这里有一个指向 IBM pubs 的链接:6.1 AIX Pubs。 搜索"mallocdebug"和"mallocoptions",你会发现你可以使用的各种功能。 (我记得)有 3 种不同的 malloc 算法可供选择,还有多个调试选项。
IBM也有Purify。 我从未使用过它(我是内核级别),但我非常尊重的应用程序人员喜欢它。
最后,AIX 具有跟踪工具,通常称为"内核跟踪",但它们也可以在应用程序空间中使用。 这些是迄今为止侵入性最小的技术。 通过一点点的制作,您可以关闭它们,而对运行的代码几乎没有影响,但您仍然可以打开它们(例如,当用户遇到只有他才能重新创建的问题时,在现场)。 要开始使用,请转到酒吧(上图)并搜索trchook。/etc/trcfmt 也有很多在其他任何地方都没有记录的信息。
祝你好运
- 当我尝试加载内核模块时,如何修复C++中的这个 malloc() 错误?
- 调用C#中的Cygwin GCC DLL挂在malloc上
- C++ malloc 中的错误
- 在C++中调用 malloc() 与"operator new"函数之间的实现差异
- 在使用新操作员和C 中的结构的调用构造函数时,获得内存损坏(Malloc)
- 使用c中的结构的malloc通过大量存储器进行索引
- 使用malloc和指针替换矩阵中的向量
- 如果在 C++ 中的 malloc() 之后调用 free() 则会出现错误
- 无法解决 opencv 代码中的 malloc 错误
- 构造函数中的 Malloc 在通过 New 调用时返回 NULL
- 每当我输入长度为4的字符串时,下面的cpp代码就会崩溃(向量中的malloc失败)
- C++ 中的 malloc 和构造函数
- C 中的 Malloc 和结构给了我错误(按照教程)
- 构造器安全中的 malloc
- C++中的 malloc/free 和 new/delete 兼容性
- 结构中的 malloc 1D 数组
- 避免c++中的malloc:从' void* '到' uv_loop_t* '的无效转换
- c++中的malloc/free:为什么free不接受const void*,有没有更好的方法?
- AIX:_snw(无符号长)中的malloc
- c++中的malloc和new在性能上有什么区别吗?