【发布时间】:2014-05-22 02:19:42
【问题描述】:
我对以下新变量“num2”是否也在堆内存上感到困惑,因为我为它分配了“num1”值,而 num1 被分配给了堆内存。
int main()
{
int *num1 = malloc(sizeof(int)); /* assign num1 to heap memory */
*num1 = 7;
int num2 = *num1; /* assign num1's value to num2, is num2 also on heap?*/
return 0;
}
【问题讨论】:
-
不,它在您的堆栈中...变量的存储不会因为您将值复制到其中而改变。
-
有没有办法在不做 malloc 或 calloc 的情况下将 num2 放在堆内存上?是否可以使用一些复制功能(如 memcpy)?谢谢
-
自动(matic)变量总是进入堆栈。您可以将其声明为静态以使其进入数据段。但是对于堆,您需要 malloc 或指向之前分配的内存块。
-
在这种情况下如何指向以前 malloc 的内存块?谢谢
-
@TonyGW :如果没有明确的
malloc或calloc,您将无法访问堆内存。虽然如果您正在使用内存较小的嵌入式系统,您可以直接访问堆内存地址并尝试对其进行操作,但这是一种肮脏且不友好的方式。
标签: c memory heap-memory