<分区>
首先,我给出了一个 C/C++ 函数的两个代码片段,揭示了 C/C++ 管理内存分配的不同策略。我在求职面试中被问到这些问题。:(
#1
char *func()
{
char *p = "hello world";
return p;
}
#2
char *func()
{
char p[] = "hello world";
return p;
}
当func返回时,人们还能得到字符串“hello world”吗?
这个答案分别是 YES 和 NO。
因为在#1 中,“hello world”是一个字符串常量。而在#2中,“hello world”的存储位置是STACK。但是这样写的时候,static char p[] = "hello world";
,答案会是YES。
那么,我的问题是C/C++ 如何控制函数的内存分配?
记忆一下我的面试官告诉我的话。我记得像 STACK/HEAP/DATA SEGMENT/PROGRAM SEGMENT/* 这样的东西。我希望任何人都能准确描述这一点。
谢谢。
添加的内容
“了解代码在内存中的管理方式将有助于程序员编写代码。”这是面试官对我说的。
上面给出的例子就是用来说明这一点的。我想问的是从程序的角度来看内存段是如何组织的我期望的答案可能会喜欢
|___________________|
| STACK |
|___________________|
| HEAP |
|___________________|
| DATA SEGMENT |
|___________________|
| PROGRAM SEGMENT |
|___________________|
| ... |
| |
从程序的角度,我不确定这样的内存分区是否正确。 (而且,可能存在存储特定类型数据的其他段。)