首页 > 系统相关 >C/C++程序的内存开辟——《初学C语言第55天》

C/C++程序的内存开辟——《初学C语言第55天》

时间:2024-01-12 20:32:09浏览次数:34  
标签:栈区 函数 55 C++ C语言 int static 内存 sizeof

//———— C/C++程序的内存开辟

C++程序内存分配的几个区域:

//int t = 2;

//static int r = 1;

//void test()

//{

//    static e = 1;

//    int n = 1;

//    int arr[10] = {1,2,3,4};

//    char g[] = "hello world";

//    char* p = "abcd";

//    int* a = (int*)malloc(sizeof(int)* 4);//函数向内存申请一块连续可用的空间

//    int* b = (int*)calloc(4, sizeof(int));//为4个大小为 size(int)的元素开辟一块空间,

//    //并且把空间的每个字节初始化为0。

//    int* c = (b, sizeof(int) * 4);//把b调整为sizeof(int) * 4的一块空间的大小,灵活调整。

//    free(a);

//    free(c);

//}


//1.内核空间(此部分用户代码不能读写)

// 是计算机系统中的一个特定部分,负责执行最关键和最高优先级的任务,如操作系统内核、设备驱动程序等。

// 在操作系统中,内核空间是操作系统内核程序运行的地方,它具有最高的权限,可以直接访问和控制硬件资源。



//2. 栈区(stack):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结

//束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是

//分配的内存容量有限。 栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返

//回地址等。

//如上式代码中的:int n,char* p,free(a);(函数内部"="y右边的均存于栈区)


//3.内存映射段:mmap函数(文件映射、动态库、匿名映射)

//将内存地址映射到特定数据区域的机制。内存映射段允许程序员将某个内存区域映射到外部设备或内核空间,

// 以便在程序中读写数据



//4. 堆区(向上增长):一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。分

//配方式类似于链表。

//如上式代码中的:(int*)malloc(sizeof(int)* 4);(int*)callc(4, sizeof(int));(b, sizeof(int) * 4);



//5. 数据段(也是静态区)(static)存放全局变量、静态数据。程序结束后由系统释放。

//如上式代码中的:int t = 2;static int r = 1;static r=1;



//6. 代码段:存放函数体(类成员函数和全局函数)的二进制代码。

//代码段就是程序中用于实现特定功能的代码块。它们可以是简单的变量赋值、循环、条件判断,

//也可以是复杂的数据结构和方法。总之,代码段是C语言中组织和管理代码的基本单位。

//实际上普通的局部变量是在栈区分配空间的,栈区的特点是在上面创建的变量出了作用域就销毁。

//但是被static修饰的变量存放在数据段(静态区),数据段的特点是在上面创建的变量,直到程序

//结束才销毁,所以生命周期变长。、

//如上式代码中的:"hello world";"abcd";



// 类的成员函数:

// 是指那些把定义和原型写在类定义内部的函数,就像类定义中的其他变量一样。

// 类成员函数是类的一个成员,它可以操作类的任意对象,可以访问对象中的所有成员

————————————————

版权声明:本文为CSDN博主「神奇阿呦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/2201_75570527/article/details/135561193

标签:栈区,函数,55,C++,C语言,int,static,内存,sizeof
From: https://blog.51cto.com/KKhahaha/9222993

相关文章

  • 【C语言进阶篇】动态内存分配的六个常见错误
    <br>(文章目录)前言  <fontcolor=green>......
  • C++采集亚马逊amazon产品数据教程
    最近亚马逊电商非常火爆,今天我将用C++语言写一个亚马逊商品数据的爬虫程序,只要是用来收集一些产品相关信息。例如产品自身特性以及产品所对应的销量,为了后期布局亚马逊做一些参考,提供数据支持,同时另外我也会用C语言同样写一篇相关的爬虫教程,方便大家借鉴。首先,这是一个非常复杂的项......
  • C++模板例子
    title:"C++模板例子"date:2023-11-02T01:05:25+08:00tags:["C++"]categories:[]draft:false#include<vector>#include<type_traits>usingnamespacestd;classAA{};classBB{};classTest{public:template<cl......
  • 初始化C语言中的复杂声明
    int*(*(*arr[5])())(); float(*(*b())[])(); void*(*c)(char,int(*)()); void**(*d)(int&,char**(*)(char*,char**));float(*(*e[10])(int&))[5];上一篇我们分析过这些声明表示什么意思,今天我们初始化下这些声明int*(*(*arr[5])())......
  • C++中 统计程序执行耗时
    C++程序有时需要统计一段代码的执行消耗时间,可以通过类chrono库来进行计算。该库中常常使用两个类来进行计算时间:std::chrono::steady_clock:表示稳定的时钟std::chrono::system_clock:表示当前系统时钟代码如下#include<chrono>usingnamespacestd::chrono;doubleG......
  • 【C++/Qt】QLCDNumber-电子时钟实战
    头文件:#ifndefDIGITALCLOCK_H#defineDIGITALCLOCK_H#include<QLCDNumber>classdigitalClock:publicQLCDNumber{Q_OBJECTpublic:digitalClock(QWidget*parent=0);protected:voidmousePressEvent(QMouseEvent*event);//鼠标点击事件void......
  • C语言int * (* (*fp1) (int) ) [10]声明是啥意思呢?
    intaa一个int类型的变量int*pp是一个指针变量,指向int类型对象const关键字,除非右边是一个类型说明符,那么它作用于该类型说明符,否则作用于左边的符号constint*p这里const右边是int类型说明符,所以作用于int,a是一个指针变量,指向const的int类型变量*p=1这样使用将会报错,因为指......
  • CF455A补题
    思路取与不取的问题,用dp就行ac代码#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;consti64inf=8e18;typedefpair<int,int>pii;constintN=1e5+10;i64dp[N];voidsolve(){intn;cin>>n;map<int,in......
  • R155法规解读
    1.车型的网络安全认证申请应当由车辆制造商或其正式授权的代表提交可能的攻击影响:safeoperationofvehicleaffected受影响车辆的安全操作Vehcilefunctionsstopworking车辆功能停止工作softwaremodified,performancealtered软件修改后性能发生变化softwarealtered......
  • 【C/C++】知识点笔记
    1-联合体内嵌结构体初始化赋值union{struct{inti;floatf;char*p;};into;}obj3={1,2.2,"sk",4,9};printf("structinlayunion:%d,%f,%s,%d\n",obj3.i,obj3.f,obj3.p,obj3.o);输出:structin......