Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何找出给定C函数和其中声明的变量的分配内存(地址和大小)?_C_Operating System_Stack_Memory Management_Stack Trace - Fatal编程技术网

如何找出给定C函数和其中声明的变量的分配内存(地址和大小)?

如何找出给定C函数和其中声明的变量的分配内存(地址和大小)?,c,operating-system,stack,memory-management,stack-trace,C,Operating System,Stack,Memory Management,Stack Trace,如果我有一个简单的C程序,只有一个主函数 如何找到分配代码的块的地址 进程分配的内存块大小 堆栈的状态(即堆栈的大小和指向堆栈的基指针) 程序中声明的每个变量的大小和位置。(我了解(sizeof)和(&)运算符的用法。但是,我如何跟踪分配给流程的每个块的变量或分配给它们的簿记变量。) 这些构造是否由操作系统维护?哪些是可访问的,为什么 在程序执行时,是否有任何工具可用于可视化此类程序状态 谢谢, de costo.调试器(如gdb)可以向您显示所有这些信息 没有简单的方法可以从程序本身中找到这

如果我有一个简单的C程序,只有一个主函数


  • 如何找到分配代码的块的地址
  • 进程分配的内存块大小
  • 堆栈的状态(即堆栈的大小和指向堆栈的基指针)
  • 程序中声明的每个变量的大小和位置。(我了解(sizeof)和(&)运算符的用法。但是,我如何跟踪分配给流程的每个块的变量或分配给它们的簿记变量。)
  • 这些构造是否由操作系统维护?哪些是可访问的,为什么

    在程序执行时,是否有任何工具可用于可视化此类程序状态

    谢谢, de costo.

    调试器(如gdb)可以向您显示所有这些信息

    没有简单的方法可以从程序本身中找到这些信息

    要查找代码段的位置,可以获取main()函数的地址(只需获取函数指针并查看它指向的位置)。或者,查看内联程序集中的指令指针

    要大致查找堆栈的位置,请从内联程序集中获取局部变量的地址或堆栈指针

    在linux下,每个进程在/proc文件夹下都有一个目录,您可以在其中读取有关进程的各种信息。(我认为其中一些内容正在移动到/sys)


    希望这能有所帮助。

    我觉得你的问题太笼统了。请详细说明您尝试执行的操作或目的是否具有教育意义。此外,请指定您感兴趣的平台。如果是Windows操作系统,那么就从经典的里克特的“微软Windows编程应用程序”开始吧@Andrey-是的,这是一个纯粹的教育问题。我对Windows、Linux和OSX感兴趣。我想深入了解程序及其执行。