c++栈内存和堆内存的基本使用小结

 更新时间:2024年07月11日 08:35:32   作者:heeheeai  
本文主要介绍了c++栈内存和堆内存的基本使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

c++栈内存和堆内存的基本使用

#include <iostream>

// 定义一个简单的结构体
struct Person {
  std::string name;
  int age;
};

int main() {
  // 栈内存分配
  int a = 10; // 基本数据类型的栈内存分配
  Person person; // 结构体的栈内存分配
  person.name = "John";
  person.age = 30;

  std::cout << "Stack memory usage:" << std::endl;
  std::cout << "a = " << a << std::endl;
  std::cout << "Person name: " << person.name << ", age: " << person.age << std::endl;

  // 堆内存分配
  int* p = new int; // 基本数据类型的堆内存分配
  *p = 20;

  Person* personPtr = new Person; // 结构体的堆内存分配
  personPtr->name = "Alice";
  personPtr->age = 25;

  std::cout << "Heap memory usage:" << std::endl;
  std::cout << "*p = " << *p << std::endl;
  std::cout << "PersonPtr name: " << personPtr->name << ", age: " << personPtr->age << std::endl;

  // 释放堆内存
  delete p;
  delete personPtr;

  return 0;
}

动态数组的使用和内存管理

#include <iostream>

int main() {
  // 动态数组的堆内存分配
  int size = 5;
  int* array = new int[size];

  // 初始化数组
  for (int i = 0; i < size; ++i) {
    array[i] = i * 10;
  }

  // 打印数组
  std::cout << "Dynamic array:" << std::endl;
  for (int i = 0; i < size; ++i) {
    std::cout << "array[" << i << "] = " << array[i] << std::endl;
  }

  // 释放堆内存
  delete[] array;

  return 0;
}

内存泄漏示例及其解决方案

#include <iostream>

void memoryLeakExample() {
  int* leakArray = new int[100]; // 这个数组没有被释放,造成内存泄漏

  // 正确的处理方式
  delete[] leakArray;
}

int main() {
  // 调用内存泄漏示例
  memoryLeakExample();

  return 0;
}

智能指针的使用

C++11引入了智能指针,可以自动管理内存,避免内存泄漏。

#include <iostream>
#include <memory> // 需要包含这个头文件

class MyClass {
public:
  MyClass() {
    std::cout << "Constructor called" << std::endl;
  }
  ~MyClass() {
    std::cout << "Destructor called" << std::endl;
  }
  void display() {
    std::cout << "Display method called" << std::endl;
  }
};

int main() {
  // 使用unique_ptr
  std::unique_ptr<MyClass> ptr1(new MyClass());
  ptr1->display();

  // 使用shared_ptr
  std::shared_ptr<MyClass> ptr2 = std::make_shared<MyClass>();
  ptr2->display();

  return 0;
}

到此这篇关于c++栈内存和堆内存的基本使用小结的文章就介绍到这了,更多相关c++栈内存和堆内存内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • 基于Qt实现一个图片对比选择浏览器

    基于Qt实现一个图片对比选择浏览器

    这篇文章主要为大家详细介绍了如何基于Qt实现一个图片对比选择浏览器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-04-04
  • C语言 自定义类型全面系统理解

    C语言 自定义类型全面系统理解

    在C语言中自定义类型主要有结构体类型、位段、枚举类型、联合体类型,自定义类型是面试常会碰到的内容,本篇文章带你彻底解决自定义类型
    2022-02-02
  • Opencv实现拼图板游戏

    Opencv实现拼图板游戏

    这篇文章主要为大家详细介绍了Opencv实现拼图板小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • C语言实现获取内存信息并输出的实例

    C语言实现获取内存信息并输出的实例

    这篇文章主要介绍了C语言实现获取内存信息并输出的实例的相关资料,需要的朋友可以参考下
    2017-03-03
  • C语言数组按协议存储与按协议解析数据的实现

    C语言数组按协议存储与按协议解析数据的实现

    今天小编就为大家分享一篇关于C语言数组按协议存储与按协议解析数据的实现,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • 在C++中实现云端存储变量的操作步骤

    在C++中实现云端存储变量的操作步骤

    随着云计算技术的快速发展,现在我们可以将数据存储在云端,以便于在不同设备和地点访问,在C++中,我们也可以通过一些方法来实现这个功能,本文将详细介绍如何在C++中实现云端存储变量,需要的朋友可以参考下
    2023-11-11
  • Windows消息传递机制详解

    Windows消息传递机制详解

    这篇文章主要介绍了Windows消息传递机制,有助于读者更好的理解windows编程的消息机制,需要的朋友可以参考下
    2014-07-07
  • 深入了解C++ 结构体(struct)与共用体(union)

    深入了解C++ 结构体(struct)与共用体(union)

    这篇文章主要介绍了C++ 结构体与共用体的的相关资料,帮助大家更好的理解和学习c++,感兴趣的朋友可以了解下
    2020-08-08
  • C语言实现三子棋的示例代码

    C语言实现三子棋的示例代码

    所谓三子棋,就是三行三列的棋盘,玩家可以和电脑下棋,率先连成三个的获胜。这篇文章主要为大家详细介绍了如何通过C语言实现三子棋小游戏,感兴趣的小伙伴可以尝试一下
    2023-01-01
  • C++中函数匹配机制详解

    C++中函数匹配机制详解

    大家好,本篇文章主要讲的是C++中函数匹配机制详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02

最新评论