【发布时间】:2016-09-23 21:27:39
【问题描述】:
假设您在编译时知道变量/指针的值,这之间有什么区别:
int x = 5;
main(){
...
}
还有这个:
main(){
int *x = (int *) malloc(sizeof(int));
*x = 5;
...
}
我知道后者将内存分配给堆,而前者分配给堆栈,但是全局变量将在整个程序期间存储,就像存储在堆中的东西一样。那么这两个sn-ps的代码在功能上有区别吗?
【问题讨论】:
-
有区别吗?我没有看到任何相似之处(
x名称除外)。而且,第二个 sn-p 根本是非法的.. -
你可能想要一本 C 书。这不是辅导网站。您的具体问题是什么?您首先尝试找出自己的什么?
-
1) C 标准没有强制实现使用堆栈,也没有强制实现像堆这样的动态内存分配。 2)一般不要投
malloc&friends或void *的结果。 3)不要使用不必要的演员表或你不完全理解的演员表。 -
“前[在]堆栈上”只有当变量是本地(自动)变量时才为真,它似乎不是,并且如果实现有一个堆栈。在您的示例
int *x = (int *) malloc(sizeof(int));中,正如您所说,要求在编译时是已知的,但是,a)为单个int动态分配内存是没有意义的,并且 b)在某些时候需要它之前不会分配内存(如果有的话)在程序运行期间。 -
@EternalStudent 在回答问题后更改问题是非常糟糕的形式。更不用说更新的第二个 sn-p 不是有效的 C,并且不会编译。我正在回滚编辑。
标签: c memory-management malloc global-variables