内存分配堆栈和堆

这可能看起来像一个非常基本的问题,但它在我的脑海中如此:

当我们分配一个局部变量时,它会进入堆栈。 同样,动态分配会导致变量堆积。 现在,我的问题是,这个变量实际上是在堆栈还是堆,或者我们只是在堆栈和堆中的引用。

例如,

假设我声明了一个变量int i 。 现在, i被分配到堆栈中。 所以,当我打印的地址i ,这将是在栈中的位置吗? 对于堆也是同样的问题。


我不完全确定你在问什么,但我会尽力回答。

下面在栈上声明一个变量i

int i;

当我使用&i询问地址时&i我得到堆栈上的实际位置。

当我使用动态分配的东西malloc ,其实有两段数据被存储。 动态内存分配在堆上,指针本身分配在堆栈上。 所以在这个代码中:

int* j = malloc(sizeof(int));

这是在堆上为整数分配空间。 它还为堆栈指针( j )分配空间。 变量j的值被设置为malloc返回的地址。


希望以下内容有用:

void foo()
{
    // an integer stored on the stack
    int a_stack_integer; 

    // a pointer to integer data, the pointer itself is stored on the stack
    int *a_stack_pointer; 

    // make a_stack_pointer "point" to integer data that's allocated on the heap
    a_stack_pointer = (int*)malloc(10 * sizeof(int));
}

在堆栈变量的情况下,变量本身(实际数据)存储在堆栈中。

在分配堆内存的情况下,底层数据总是存储在堆中。 指向该存储器/数据的指针可以被本地存储在堆栈上。

希望这可以帮助。


指针变量本身将驻留在堆栈上。 指针指向的内存将驻留在堆上。

int *i = malloc(sizeof(int));

i将驻留在堆栈上,我指向的实际内存*i将在堆上。

链接地址: http://www.djcxy.com/p/82525.html

上一篇: memory allocation in Stack and Heap

下一篇: How variables are allocated memory in Javascript?