2017-06-22 44 views
-5

我在基础C++编程的夜校学习,我有一些问题需要修改,对我来说没什么意义,我的意思是我认为我知道答案,但我会喜欢由这里的人和专家来运行,以获得良好的理解,我尝试通过谷歌寻找特定的答案,但很难找到。如何在C++内存管理中管理类 - 研究

以下代码如何在C++内存管理中管理不同变量(* mystring,msize,x,y, * px,new int)?

class myclass 
{ 
public: 
char *mystring = “thestring”; 
int msize = 200; 
int myfunc(int x) 
{ 
int y = 20; 
x = x + y; 
return x * y; 
} 
int main(void) 
{ 
int *px = new int; 
cin >> x; 
cout << myfunc(x); 
delete px; 
} 
} 

现在假设,当一个类在内存中实例化,因为开始和结束的内存位置,它在声明中代码的顺序创建值的副本,所以我猜的char *得到某种指针。

int msize将在之后,并将是一个8位值,其后的地址。

但我假设函数在类中调用?

+1

我无法真正弄清楚你在问什么,但是如果你问的是如何将所有的变量放在内存中,答案是C++标准没有强制任何特定的布局。这完全取决于编译器,不同的符合C++编译器可能会在内存中完全不同。事实上,根据许多因素(优化,目标架构等),相同的编译器可能会有不同的结果,因此如果没有引用特定的编译器和命令行选项,您可能希望得到的最佳答案是“它依靠。” – cdhowie

+0

你有免费的功能,为什么他们会在任何课堂被叫? (在这段代码中没有一个类) – UnholySheep

+0

@cdhowie你看到我认为这个问题本身是模糊的,我不太清楚我在内存管理中如何管理它。 –

回答

-1

这里是你的意思的代码我最好的猜测:

#include <iostream> 

using namespace std;  

char *mystring = "thestring"; // extremely dangerous type mismatch, don't do this 
int msize = 200; 

int myfunc(int x) 
{ 
    int y = 20; 

    x = x + y; 

    return x * y; 
} 

int main(void) 
{ 
    int *px = new int; 

    cin >> *px; 
    cout << myfunc(*px); 
    delete px; 

    return 0; 
} 

变量“MyString的”和“MSIZE”是全局变量,其内存编译器静态地分配。这些变量在整个程序运行期间都存在,通常可以通过程序的任何部分的名称来访问。

'x'和'y'是函数'myfunc'的局部变量。它们存在并且只能在对该函数的每次调用中按名称访问。

'px'是函数'main'的局部变量。 'main'在这方面有些特别,通常它是程序的入口点,当它返回时,程序退出。所以,'px的生命周期本质上是在程序期间,尽管它只能在'main'函数中被这个名称访问。

'new int'为int显式动态分配内存,然后这个int可用,直到通过匹配的显式调用删除它为止。

典型情况下,当线程进入和退出变量的作用域(同时也调用构造函数和析构函数)时,局部变量的内存被压入(并弹出)正在运行的线程的堆栈。动态分配的内存最终通过调用C++中的new和delete(或者malloc和C中的free)来为每个变量显式管理。