Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.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++中,它是否位于内存中的特定位置,因为函数指针存在?如果是,具体在哪里?上课怎么样?是否有存储在类定义中的内存?< P>类,在C++和所有OOP语言中,如果它们很重要,它们通常是在堆上创建的。虽然C++可以在堆栈上创建它,如果省略了新关键字,但通常不推荐,因为类往往是资源重的,但这意味着如果不显式删除它,则会出现内存泄漏。_C++_C_Function_Memory_Function Pointers - Fatal编程技术网

内存中的编程语言函数位于哪里? 当调用函数时,让我们说C++中,它是否位于内存中的特定位置,因为函数指针存在?如果是,具体在哪里?上课怎么样?是否有存储在类定义中的内存?< P>类,在C++和所有OOP语言中,如果它们很重要,它们通常是在堆上创建的。虽然C++可以在堆栈上创建它,如果省略了新关键字,但通常不推荐,因为类往往是资源重的,但这意味着如果不显式删除它,则会出现内存泄漏。

内存中的编程语言函数位于哪里? 当调用函数时,让我们说C++中,它是否位于内存中的特定位置,因为函数指针存在?如果是,具体在哪里?上课怎么样?是否有存储在类定义中的内存?< P>类,在C++和所有OOP语言中,如果它们很重要,它们通常是在堆上创建的。虽然C++可以在堆栈上创建它,如果省略了新关键字,但通常不推荐,因为类往往是资源重的,但这意味着如果不显式删除它,则会出现内存泄漏。,c++,c,function,memory,function-pointers,C++,C,Function,Memory,Function Pointers,对于函数指针,它们通常只是堆栈中指向只读内存中独立代码块的指针。所有这些都可能是错误的,这不是我的专长。但据我所知 运行时的函数是可执行文件中的一个位置,较低的部分可以调用它,从而改变堆栈。。。没关系,我不想再进一步解释了 类不存储在内存中。这完全是概念性的。假设你有以下结构 struct idk { char* name; int index; void* data; }; 嗯,运行时的新idk实际上并没有查看某种定义来知道分配什么。相反,编译器会计算出所有内容,这样

对于函数指针,它们通常只是堆栈中指向只读内存中独立代码块的指针。

所有这些都可能是错误的,这不是我的专长。但据我所知

运行时的函数是可执行文件中的一个位置,较低的部分可以调用它,从而改变堆栈。。。没关系,我不想再进一步解释了

类不存储在内存中。这完全是概念性的。假设你有以下结构

struct idk
{
    char* name;
    int index;
    void* data;
};
嗯,运行时的新idk实际上并没有查看某种定义来知道分配什么。相反,编译器会计算出所有内容,这样最终的结果是新idk在概念上等同于新char[sizeofidk],尽管这并没有考虑对齐和打包。无论如何,引用也没有任何形式的表来查看变量在哪里,而是在编译时确定的,因此int n=idk_thing.index可能会像int n=*int*&idk_thing+sizeofchar*;等等

当然,类的存储实现几乎与结构的存储实现完全相同,任何特定于类的函数都只是普通的旧函数,同样,编译器以某种方式设置,以便通过访问类实例的存储来修改类中的变量。我假设这是通过向函数传递一个指向存储器的指针来实现的,函数通过偏移量访问内存块,这取决于它使用的变量,就像我刚才所说的结构一样


现在,对于函数指针,假设我至少对编译后的等价函数有正确的认识,我会说函数指针只是数字,表示加载的可执行文件中的位置,即函数的起始位置,正如char*是一个数字,表示char在内存中的位置。

是的,函数位于内存中的特定位置。在与物理缓存相对的虚拟内存上下文中,它们存储在堆的下面,并存储在名为Text的部分中名为Data global variables的部分的下面。所有这些都是在读取可执行文件时加载的;这一切都是在二进制中完成的,与汇编是一对一的,所以您永远不会在C代码中看到这一点。但是,如果您对处理器很了解,有时仍然可以操纵它从代码中的代码部分进行读取。但是,它可能会导致segfault,并且通常无法写入代码部分

就像指向变量的指针一样,函数指针指向整个堆栈上的一个位置,请参见。实际上,有一个寄存器专门用来精确地指向程序当前正在执行的指令


类定义和成员函数在堆栈上也有特定的位置;我不完全确定,但我相信它们是数据。

如果是,具体在哪里?程序的文本/代码段。查找链接器映射。如果它没有位置,则无法调用它!编译、链接、重新定位和加载的机制是特定于体系结构/操作系统的,对SO来说太广泛了。你不确定类定义吗?@ArmonSafai不,我不确定;类抽象使事情变得复杂。例如,成员函数应该放在代码部分吗?我们可以在我们的类部分中留下一个指向它们的指针,不管它在哪里,但这是一个不必要的跳转,它们也可能是内联的,据我所知,内联关键字与内联关键字并不完全相同。好的,谢谢你的回复,你肯定这些函数,对吗?