2015-04-03 80 views
2

我正在阅读B.Stroustrup的“使用C++编程原则和实践”,我正在尝试做大部分练习。这一个非常有趣,我不知道从哪里开始。内存布局练习C++

的运动是:

17.4考虑布局。编写一个程序,用于说明静态存储,堆栈和免费存储在内存中的排列顺序。堆栈向哪个方向发展:向更高的地址上升还是向下的地址下降?

布局17.4:

码 - 存储器,用于代码

静态数据 - 全局变量

自由存储空间 - 可用内存

堆栈 - 内存调用函数和空间的参数和局部变量

我怎样才能真正知道这一切发生的顺序?更好的是,我怎么才能真正输出顺序呢?

是不是应该由编译器来处理,或许我只是误解了这个练习?很少的技巧会非常酷!

感谢

+5

打印出指向每个段中存在的事物的指针。虽然这假定指针值实际上对应于物理内存位置... – 2015-04-03 19:48:13

+0

请在您的问题中更具体些。如果你能缩小你的问题,那么这个问题会很好。例如,“不是应该由编译器处理”中的“它”是什么? – ryanyuyu 2015-04-03 19:48:44

+0

是的,我的意思是所有这些内存给予程序的不同部分(全局变量,堆栈,免费存储)。我所知道的是,编译器正在为我们做这些东西,但据我了解,我必须以某种方式使程序,显示编译器在做什么,他在做什么 – etrusks 2015-04-03 19:54:57

回答

1

是不是应该由编译器

连接,更具体的处理。

这里是一个起点,完全按照约瑟夫曼斯菲尔德的建议。

#include <iostream> 

int static_data; 

int main() 
{ 
    int stack_data; 

    if (&static_data < &stack_data) 
    { 
     std::cout << "Static data is in lower memory than the stack."; 
    } 
} 
+0

现在很酷,我明白了:)感谢大家伙:) – etrusks 2015-04-03 20:04:42

+0

测试一下,如果你的编译器把'int mutable_global'放在与const int const_global不同的位置,并且'static int static_mutable_global'和' static const int static_const_global'。你必须“交错”他们,看看哪些变成了“未交错”。 – 2015-04-03 20:05:47

+0

这是我在这个论坛中的第一个问题,我很惊讶在这里得到的答案有多快。非常酷! – etrusks 2015-04-03 20:07:02