C/C++中的内存区域大体可划分为这三个部分:栈区、堆区以及静态区,这三块区域比较重要。比如我们的 main 函数就是在栈上开辟的空间,当然我们使用的一般变量也都是存储在栈区上的,但是栈区空间有限,不能存储较大的数据,此时我们会通过动态内存管理来为这些“大数据”在堆上开辟空间供其使用,用完后记得释放内存就...
EBP寄存器是用于访问堆栈中的数据的,它指向堆栈中间的某个位置(具体位置后文会具体讲解),函数的参数地址比EBP的值高,而函数的局部变量地址比EBP的值低,因此参数或局部变量总是通过EBP加减一定的偏移地址来访问的,比如,要访问函数的第一个参数为EBP+8。 4. 堆栈中到底存储了什么数据?包括了:函数的参数,函数的局部...
ptr1和上面相同,是在栈上的一个指针变量指向堆上的一块空间(malloc开辟),而*ptr就是对指针解引用,在堆上 为了更好理解常量区,我们来验证一下 对下面的代码进行调试 int main() { char char2[] = "abcd"; char2[0]++; return 0; } 在这里插入图片描述 在这里插入图片描述 经过调试可以看出char2存储的...
堆栈是一种重要的数据结构,它是一种线性数据结构,其元素按照先进后出(FILO)的原则进行组织和管理。堆栈可以用于存储程序中的函数调用、局部变量、返回地址等,同时也可以用于实现一些算法,如深度优先搜索、括号匹配等。一、堆栈数据结构 堆栈数据结构的主要特点包括:先进后出:堆栈的插入和删除操作都是从同端进行...
存放未初始化的全局变量,BSS这个叫法是根据早期的汇编运算符而来的,这个汇编运算符标志着一个块的开始。BSS区的数据在程序开始执行之前被内核初始化为0或空指针(NULL)。 2)C程序结构:程序执行时 一个正在运行的C程序,占用的内存分为5个区域:代码区、初始化数据区/静态数据区、未初始化数据区、堆区、栈区。
静态分配的内存,是在栈中分配的,其实在C语言中的函数调用也是通过栈来实现的,栈这种数据结构的一个特点就是(先进后出),所以,在调用函数的时候,都是先压入栈中,然后,再从最上面的函数开始执行,最后,执行到main函数结束。动态分配通过malloc分配,是在堆中分配的,堆不是一种数据结构,它是一种排序方式,堆排序。
本文介绍C/C++中堆,栈及静态数据区。 五大内存分区 在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。下面分别来介绍: 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。
6、动态内存分配相关的函数,它们要操作或者申请的的内存空间属于内存中的堆区 #include <stdio.h>#include <stdlib.h>int main(){//申请10个整型(40个字节)的空间int* p = (int*)malloc(10 * sizeof(int));//判断内存空间是否非开辟成功if (p == NULL){perror("malloc"); 如果开辟失败就是用perror...
当要调整的内存地址为NULL时,realloc 的功能相当于 malloc。 int* p = (int*)realloc(NULL, 40); // 这里功能类似于malloc,就是直接在堆区开辟40个字节 三、常见的动态内存错误 1、对NULL指针的解引用操作 // error - 错误演示#include <stdlib.h>#include <stdio.h>void test(){int* p = (int*)...