首页 > 系统相关 >范围 for,new 内存动态分配,nullptr

范围 for,new 内存动态分配,nullptr

时间:2024-09-16 19:01:42浏览次数:9  
标签:malloc int nullptr free 动态分配 new 分配 内存

范围 for,new 内存动态分配,nullptr

范围 for

int main()
{
    int arr[] = {11, 12, 13, 14, 15};
    for (auto x : arr){ //  问题所在:需要将 arr 中的每一个都拷贝到 x 中去 ===> 节省拷贝的方法:使用指针,提升效率
        cout << x << endl;
    }
    cout << "===============================" << endl;
    //  改进
    for (auto &x : arr){ // 省了拷贝这个动作,提高了系统效率
        cout << x << endl;
    }
    return 0;
}

new 内存动态分配

C中 供程序使用的存储空间:程序区,静态存储区,动态存储区
C++ 中,我们把区域进一步分为5个区域:

  1. 栈:一般函数内的局部变量都会放在这里,由编译器自动分配和释放
  2. 堆:程序员 malloc / new 分配,用 free /delete 来释放。忘记释放后,系统会回收
  3. 全局/静态存储区:放全局变量和静态变量 static。程序结束时系统释放
  4. 常量存储区:"I Love China"
  5. 程序代码区

堆和栈的区别:

  1. 栈:空间是有限的,这是系统 int a = 4; 分配速度快,程序员控制不了
  2. 堆:只要不超出你实际的物理内存,也在操作系统允许你能够分配的最大内存大小 之内,都可以分配给你,分配速度1比栈慢,你可以随时使用 new / malloc 来分配,free / delete 来释放,非常灵活。

malloc 和 free:在 C 语言中,用 malloc 和 free 从堆中来分配和释放内存用。malloc 和 free 是函数

//  返回类型是:void * ===> 万能的类型指针(指向什么东西都行,可以被强制转换成任何其它类型指针)
//  - 分配成功:返回指向被分配内存的指针
//  - 分配失败:则返回 NULL
void *malloc(int NumBytes);  //  NumBytes:要分配的字节数
//  当这段分配的内存你不使用的时候,你应该用 free() 函数来将内存释放掉,供其它地方使用
void free(void *FirstByte); 

C 语言例子

int main()
{
    int *p = NULL;
    p = (int *)malloc(sizeof(int)); //  在堆中分配 4个字节
    if (p != NULL) {
        //  分配成功
        *p = 5;
        cout << *p << endl;
        free(p); // 释放掉,千万不要忘记
    }
    char *point = NULL;
    point = (char *)malloc(100 * sizeof(char)); //  100个位置
    if (point) {
        strcpy(point, "hello world!!!");
        cout << point << endl;
    }
    return 0;
}

再看见 C++ 的 new 和 delete


nullptr

标签:malloc,int,nullptr,free,动态分配,new,分配,内存
From: https://www.cnblogs.com/aclq/p/18416505

相关文章

  • JavaScript 手写new操作符
    new关键字的工作步骤创建一个新的对象obj将对象与构建函数通过原型链连接起来将构建函数中的this绑定到新建的对象obj上根据构建函数返回类型作判断,如果是原始值则被忽略,如果是返回对象,需要正常处理constrecodeNew=function(Func,...args){//获取函数对象......
  • 《鸿蒙/Harmony | 开发日志》DevEco Studio 使用NewUI
    DevEco也是基于Jetbrain的IntelliJIDEA社区版开发。用习惯了Idea和AndroidStudio的新UI界面。看着旧版的界面风格太难了。官方没有提供改NewUI的方式,不过还是有其它的方法可以开启。只是有些功能可能没有那么好用,需要注意一下。不过在我用下来,目前的问题都能解决。开启N......
  • Executors.newCachedThreadPool()的使用
    //线程池privatefinalExecutorServiceexecutorService=Executors.newCachedThreadPool();executorService.submit(()->orderDecrypt(meituanOrderInfoExp));@Transactional@OverridepublicvoidorderDecrypt(MeituanOrderInfoExpmeituanOrderInfoExp......
  • 78_JAVA_new的使用在JAVA与C++的异同之处
    Java和C++都使用new关键字来创建对象和分配内存,但它们在实现和使用上有一些重要的异同之处。以下是这两种语言中new使用的主要异同点:1. 内存管理Java:自动内存管理:Java使用垃圾回收(GarbageCollection,GC)机制来自动管理内存。对象的生命周期由垃圾回收器自动管理,......
  • 【转】Chrome 的无头模式升级了:推出 --headless=new
     Chrome的无头模式变得更好用了!本文概要介绍了近期的工程工作,让 Headless 更接近Chrome的常规“Headful”模式,让Headless对开发者更有用。背景早在2017年,Chrome59 便引入了所谓的无头模式,可让您在没有任何可见界面的无人值守环境中运行浏览器。从本质上讲,就是在不使用 ......
  • 前端中的new函数:深入解析与实战应用
    前端中的new函数:深入解析与实战应用在JavaScript(以及许多其他面向对象编程语言中),new关键字扮演着创建对象实例的重要角色。它不仅用于调用构造函数来初始化新对象,还涉及一系列复杂的内部步骤来确保新创建的对象能够正确地与构造函数相关联。本文将深入探讨new函数的工作原......
  • 面向对象中__new__和__init__区别
    在Python的面向对象编程中,__new__和__init__是两个重要的特殊方法,它们分别用于对象的创建和初始化。虽然它们的功能相互关联,但各自的作用和使用场景有所不同。以下是它们之间的主要区别:1.__new__方法目的:__new__是一个静态方法,用于创建一个新的实例。它负责分配内存并......
  • 【C++】new的底层实现原理
    文章目录理解C++`new`的原理1.`new`的基本工作流程2.`new`和`malloc`的区别3.`new`的底层实现4.`new[]`与`delete`的配对使用5.自定义`new`和`delete`6.定位new7.内存泄漏与异常安全理解C++new的原理在C++中,new操作符用于在堆上动态分......
  • SmartNews如何赋能日本市场解锁购买力强劲广告营销新篇章
    SmartNews如何赋能日本市场解锁购买力强劲广告营销新篇章在数字化浪潮席卷全球的今天,日本市场以其独特的消费文化和强大的购买力,成为了众多品牌竞相角逐的舞台。而SmartNews,作为一款集新闻聚合、个性化推荐与深度内容分析于一体的智能新闻应用,正悄然改变着日本市场营销的格局......
  • C# console application main method new and start wpf window application
    1.NewConsoleapplication;2.Addreference,PresentationCoreandWindowsBase3.usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows;usingSystem.Windows.Controls;using......