我正在阅读这个问题,因为我试图在C++程序中找到一个函数的大小,暗示可能有一种特定于平台的方法.我的目标平台是windows
我目前掌握的方法如下:
1.获取指向函数
的指针2.递增指针(和计数器),直到达到3的机器代码值ret
.计数器将是函数的大小?
编辑1:澄清我的意思'大小'我的意思是组成函数的字节数(机器代码).
编辑2:有一些评论询问为什么或我打算用这个做什么.诚实的答案是我没有意图,我无法真正看到了解函数长度预编译时间的好处.(虽然我确定有一些)
这对我来说似乎是一种有效的方法,这会有用吗?
我使用Linux与x86(准确地说是64位).有没有办法可以得到当前指令的地址.其实我想写自己的简化版本的setjmp/longjmp.在这里,R ..发布了longjmp的简化版本.知道如何实现setjmp.一个简化的版本,没有考虑异常和信号等...
我已经创建了一个小程序作为系统的概念验证,这些系统将在嵌入式平台上实现.该程序是用C++ 11编写的,使用std编译并在笔记本电脑上运行.应该在以后实施的最终程序是嵌入式系统.我们无权访问嵌入式平台的编译器.
我想知道是否有一种方法可以在将应用程序移植到嵌入式平台时以合理且可比较的方式确定程序静态内存(已编译二进制文件的大小).要求是二进制文件的大小小于10kb.编译时,我们的二进制文件大小为700Kb,并使用以下标志进行剥离:
g++ options: -Os -s -ffunction-sections -fdata-sections
linker options: -s -Wl,--gc-sections
strip libmodel.a -s -R .comment -R .gnu.version --strip-unneeded -R .note
Run Code Online (Sandbox Code Playgroud)
在使用条带和优化选项之前,它占用了4MB.
我仍然离开,这不是一个很大的计划.如何以任何方式与嵌入式平台上的等效程序进行比较是合理的.
我正在学习函数指针,我知道我们可以使用函数指针指向函数。然后我假设它们保留在内存中。它们保留在堆栈还是堆中?我们可以计算它们的大小吗?
在 C 语言中很容易得到函数的起始地址,但不能得到它的大小。因此,我目前正在目标文件上执行“nm”,以便找到我的函数,然后找到下一个函数的起始地址。我需要执行“nm”,因为编译器可以(在我的情况下实际上可以)重新排序函数,因此源顺序可以与对象顺序不同。
我想知道是否还有其他方法可以做到这一点。例如,指示编译器保留目标文件中的源代码顺序等。也许有一些 ELF 魔法?
我的编译器是 GCC、CLANG 和 Sun Studio。平台:Solaris 及其衍生产品、MacOSX、FreeBSD。未来要拓展。
c compiler-construction elf compiler-optimization object-files
如何在C++中获取函数的大小?
假设我有一个功能:
void f()
{
/*do something*/
}
Run Code Online (Sandbox Code Playgroud)
..."大小f"是指代码的大小/*do something*/,从指针指示的地址开始f.