C ++中的堆栈或堆的全局内存管理?
如果我在C ++应用程序中全局声明数据结构,它会消耗堆栈内存还是堆内存?
例如
struct AAA
{
.../.../.
../../..
}arr[59652323];
由于我对答案不满意,并希望同一个karjatkar想要学习的不仅仅是一个简单的是/否的答案,在这里你去。
通常一个进程分配了5个不同的内存区域
如果你真的想知道什么是保存在哪里然后阅读和书签这些:
编译器,汇编器,链接器和装载器:简要说明(请参阅表w.5)
记忆中的程序剖析
替代文字http://www.tenouk.com/ModuleW_files/ccompilerlinker006.png
问题在于这个问题。 假设你已经有了一个小C(++以及它们以相同的方式处理)程序如下:
/* my.c */
char * str = "Your dog has fleas."; /* 1 */
char * buf0 ; /* 2 */
int main(){
char * str2 = "Don't make fun of my dog." ; /* 3 */
static char * str3 = str; /* 4 */
char * buf1 ; /* 5 */
buf0 = malloc(BUFSIZ); /* 6 */
buf1 = malloc(BUFSIZ); /* 7 */
return 0;
}
main
返回时有效地释放。 该字符串,因为它是一个常量,所以与其他字符串一起被分配在静态数据空间中。 static
关键字告诉你它不会被分配到堆栈上。 buf1
在堆栈上,并且 malloc
具有感兴趣的返回值; 你应该总是检查返回值。 例如:
char * bfr;
if((bfr = malloc(SIZE)) == NULL){
/* malloc failed OMG */
exit(-1);
}
通常它不会消耗。 它试图将它们分配到一个内存段中,该段很可能在程序执行时保持不变。 它可能是bss,堆栈,堆或数据。
链接地址: http://www.djcxy.com/p/79079.html