注意:答案是按照特定的顺序给出的,但由于许多用户根据投票而不是给出的时间对答案进行排序,因此这里是答案的索引,它们是最有意义的顺序:
(注意:这是Stack Overflow的C++常见问题解答的一个条目.如果你想批评在这种形式下提供常见问题解答的想法,那么发布所有这些的元数据的发布将是这样做的地方.这个问题在C++聊天室中受到监控,其中FAQ的想法一开始就出现了,所以你的答案很可能被那些提出想法的人阅读.)
我正在尝试生成调用图,用它来找出所有可能执行特定函数的执行路径(这样我就不必手动计算出所有路径,因为有很多路径可以导致这个功能).例如:
path 1: A -> B -> C -> D
path 2: A -> B -> X -> Y -> D
path 3: A -> G -> M -> N -> O -> P -> S -> D
...
path n: ...
Run Code Online (Sandbox Code Playgroud)
我已经尝试过Codeviz和Doxygen,不知怎的,两个结果只显示目标函数的被调用者D.在我的例子中,D是一个类的成员函数,其对象将被包装在智能指针中.客户端将始终通过工厂获取智能指针对象以调用D.
有谁知道如何实现这一目标?
所有.
我想链接一个调用malloc()函数的库.但是,我的目标环境是不同的,并
malloc()作为内联函数提供.
如何将库的调用malloc()指向我的目标环境的malloc()例程?
是否可以更改导出的函数名称?如果是这样,我可以my_malloc()先编码并将其导出为malloc()并将库链接到该库:
#include <my_environment.h> // malloc() is inline function declared there
void my_malloc (void) {
malloc (void);
}
Run Code Online (Sandbox Code Playgroud)
更具体地说,该库是来自linux发行版的库,因此它依赖于libc.但我的环境嵌入了一个,没有libc库和malloc(),free()......是定制的实现.一些是内联函数,一些是库函数.
我有一个在基于ARM Cortex-M的MCU上运行的应用程序,用C和C++编写.我使用gcc并g++编译它,并希望完全禁用任何堆使用.
在MCU启动文件中,堆大小已经设置为0.除此之外,我还想禁止在代码中使用任何意外的堆.
换句话说,我想接头(和/或编译器),以给我一个错误时malloc,calloc,free功能或new,new[],delete,delete[]运营商使用.
到目前为止,我已经尝试过-nostdlib这样的问题undefined reference to _start.我也尝试过,-nodefaultlibs但是当我试着打电话时,我仍然没有抱怨malloc.这样做的正确方法是什么?
笔记:
从我们的嵌入式系统代码中删除对malloc和calloc的所有调用后,我惊讶地发现malloc仍然被链接.调用图指向一个没有显式*alloc调用的函数,并且没有调用任何可能分配的库函数,比如strdup.
我必须查看生成的程序集才能意识到它是由于包含VLA的内联函数.
我认为VLA必须是堆栈分配的.这个编译器坏了吗?