我一直在阅读如何在C++中分配内存。C++中的内存组织
一些资源提:
http://www.geeksforgeeks.org/memory-layout-of-c-program/
http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory
Object creation on the stack/heap?
Global memory management in C++ in stack or heap?
http://msdn.microsoft.com/en-us/library/vstudio/dd293645.aspx
Heap/Stack and multiple processes
Do different programs gets their memory from a common heap or from a separate heap?
http://computer.howstuffworks.com/c28.htm
我想根据我的阅读澄清几点:
根据http://www.geeksforgeeks.org/memory-layout-of-c-program/第4栈“堆栈,其中自动存储变量以及每次保存的信息E中的功能被称为”
假设:
class myClass{
int a;
char b;
public:
myClass(int a,char b)
{
this->a = a;
this->b = b;
}
};
1)据我已阅读,当我们编译这段代码二进制坐落在程序存储器和目前尚无分配堆栈。正确?
现在,在我的主要:
int main()
{
myClass Ob(1,'c');
return 0;
}
2)现在的大小5个字节的物体Ob(4字节(int)的,1个字节(字符) - 32位OS)是在堆叠产生的,因为它是一个自动变量。正确吗?
3)当构造函数myClass(int a,char b)
被调用时,临时变量(参数a,b)是在堆栈上为构造函数创建的,然后在创建对象Ob后被销毁?就像我们通过按值传递参数来调用函数一样。
现在假设另一类
class pointerClass {
int a;
char* b;
public:
pointerClass(int size){
b= new char[size];
a=size;
}
};
现在,在主:
int main()
{
pointerClass ptr(10) ; //Step 1
}
4)不执行的大小的8个字节这意味着PTR对象(INT一个(4个字节),字符* B(4字节,即只是持有指向堆的地址)在堆栈上创建?还有一个10字节的内存(对应于新的char [10]被分配在堆上),它正在被char * b的内容指向吗?正确吗?
5)当我们通过引用(如fn (int *a,char* b)
或fn(int& a,char& b)
)将参数传递给某个函数时,这是否意味着在函数栈上为函数指定实际传递的对象并在函数返回时被销毁时创建临时指针/引用?或者更确切地说是传递实际的对象,而不是创建并销毁函数栈上的临时指针/引用?
这是我昨天问,但我不是满意的答复: Constructor, Copy Constructor and Stack Creation : C++
6)当我们重载FN如fn(int a,char b)
fn(int& a,char& b)
我们可以从主调用为fn(A,B)
低于投 static_cast<void(*)(int, char)>(fn)(a, c); //Calls fn(int a,char b)
static_cast<void(*)(int&, char&)>(fn)(a, c);//Calls fn(int& a.char& b)
到底发生了什么?什么是无效(*)。
由于
我认为你需要将这个问题分成几个小问题。你希望我们写C++书作为答案吗? – 2013-05-07 06:16:44
我认为所有的问题都是相关的,因此置于一个问题之下。答案是“是”或“否”。大多数情况下,输入时不需要输入太多的内容。 – 2013-05-07 06:18:09
@Mat编辑我的问题 – 2013-05-07 06:19:48