sam*_*kar 70 c++ stack memory-management
如果我在C++应用程序中全局声明数据结构,它是否会消耗堆栈内存或堆内存?
例如
struct AAA
{
.../.../.
../../..
}arr[59652323];
Run Code Online (Sandbox Code Playgroud)
Mil*_*lan 132
由于我对答案不满意,并希望同样的karjatkar想要学习的不仅仅是一个简单的是/否答案,在这里你走了.
通常,进程分配了5个不同的内存区域
如果您真的想学习保存的内容,请阅读并为这些书签添加书签:
替代文字http://www.tenouk.com/ModuleW_files/ccompilerlinker006.png
Cha*_*tin 27
这里的问题是问题.让我们假设你有一个很小的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;
}
Run Code Online (Sandbox Code Playgroud)
main
返回时将被有效地释放.字符串,因为它是一个常量,在静态数据空间中与其他字符串一起分配.static
关键字告诉您它不会在堆栈上分配.buf1
在堆栈上,并且malloc
具有感兴趣的回报值; 你应该经常检查返回值.例如:
char * bfr;
if((bfr = malloc(SIZE)) == NULL){
/* malloc failed OMG */
exit(-1);
}
Run Code Online (Sandbox Code Playgroud)
都不是.它是.data部分.
全局内存预先分配在固定的内存块中,或者在堆上,具体取决于应用程序的分配方式:
byte x[10]; // pre-allocated by the compiler in some fixed memory block
byte *y
main()
{
y = malloc(10); // allocated on the heap
}
Run Code Online (Sandbox Code Playgroud)
编辑:
问题很混乱:如果我在C++应用程序中全局分配数据结构,它是否会消耗堆栈内存或堆内存?
"分配"?这可能意味着许多事情,包括调用malloc().如果问题是"如果我在全球范围内声明并初始化数据结构",情况会有所不同.
许多年前,当CPU仍在使用64K段时,一些编译器足够聪明,可以从堆中动态分配内存,而不是在.data段中保留块(由于内存架构的限制).
我想我太老了......
归档时间: |
|
查看次数: |
58178 次 |
最近记录: |