首页 > 系统相关 >C++程序的内存分区

C++程序的内存分区

时间:2022-10-14 17:00:42浏览次数:50  
标签:salary int 分区 C++ 内存 printf girl 分配

1、栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量值等。 2、堆区(heap):一般由程序员分配释放,随叫随到,挥之即走。 3、全局/静态区(static):全局变量和静态变量的存储是放在一起的,在程序编译时分配。 4、文字常量区:存放常量字符串。 5、程序代码区:存放函数体(包括类的成员函数、全局函数)的二进制代码。

#include <iostream>
#include <string>
#include <windows.h>
using namespace std;

int oldMan = 58; //全局变量
//1.栈的内存
void say_hello(const char* msg) { //函数的参数和局部变量存放在栈区
    if (msg) {
        printf("Hello,%s!\n",msg);
    }
    else {
        printf("Hello,who are you?\n");
    }
    printf("老爷子今年 %d 岁!\n", oldMan);
}
//2.静态变量
void house1(int girl1) {
    static int girl = 18;
    if (girl == 18) {
        girl = 19;
    }
    else {
        girl = 17;
    }
    printf("女孩今年%d岁!\n",girl);
}
int main() {
    //1.栈的内存
    say_hello(NULL);
    say_hello("world");

    //2.堆,动态内存分配
    int* salary = NULL;
    salary = new int; //在堆区分配动态内存,分配一个
    *salary = 100;
    printf("salary:%d\n",*salary);
    delete salary;  //释放内存,长期不释放会导致内存泄漏

    int num = 0; 
    printf("请输入需要雇佣的农民数量:\n");
    scanf_s("%d",&num);
    if (num <= 0) {
        printf("请输入一个大于0的数!");
        exit(1);
    }
    salary = new int[num];//在堆区分配动态内存,分配多个
    for (int i = 0; i < num; i++) {
        *(salary + i) = i + 1;
    }
    for (int i = 0; i < num; i++) {
        printf("第%d个农民的薪资:%d\n",i+1,salary[i]);
    }
    printf("--over--\n");
    delete[] salary;

    //切记,delete 后的动态内存,禁止访问
    /*for (int i = 0; i < num; i++) {
        printf("第%d个农民的薪资:%d\n", i + 1, salary[i]);
    }*/

    //3.全局变量/静态变量
    printf("老爷子今年%d岁!\n",oldMan);
    house1(0);
    house1(0);//第二次调用时girl的值不会被重新赋值为18

    system("pause");
    return 0;
}

标签:salary,int,分区,C++,内存,printf,girl,分配
From: https://www.cnblogs.com/smartlearn/p/16792185.html

相关文章

  • linux查看内存&磁盘
    查看内存空间使用“free”命令可以查看服务器的内存空间,选项“-m”表示以MB(兆字节)的数据存储单位进行显示。执行结果如下所示:[root@localhost~]#free-m......
  • ESP32 分区表
    当你编译程序,发现apppartitionistoosmallforbinary错误的时候,就涉及到ESP32分区表的内容了。一、基本概念在了解分区之前,先了解一下以下概率,便于ESPe32分区......
  • C/C++ 错题总结
    写出下列程序在X86上的运行结果structmybitfields{unsignedshorta:4;......
  • extern、关于C++的变量和类的声明和定义
    extern参考:extern声明变量详解变量的声明:intdata;//这样既声明了data同时也定义了dataexternintdata;//只声明而不定义函数的声明:voidhello();......
  • Python在计算内存时应该注意的问题?
    我之前的​​一篇文章​​​,带大家揭晓了Python在给内置对象分配内存时的5个奇怪而有趣的小秘密。文中使用了​​sys.getsizeof()​​来计算内存,但是用这个方法计算时,可......
  • C++ thread array and join respectively
    #pragmacomment(lib,"rpcrt4.lib")#include<Windows.h>#include<rpcdce.h>#include<iostream>#include<string>#include<thread>#include<vector>usingn......
  • C++ generate and quick sort in template
    #pragmaonce#include<iostream>#include<random>#include<algorithm>usingnamespacestd;random_devicerd;mt19937_64mt(rd());template<typename......
  • C++ 队列!还是要从 STL 中的说起……
    1.前言队列和栈一样,都是受限的数据结构。队列遵循先进先出的存储原则,类似于一根水管,水从一端进入,再从另一端出去。进入的一端称为队尾,出去的一端称为队头。队列有2......
  • C++学习笔记2
    类类与对象类和结构体的区别结构体相当于是只有类的数据域。但其区别有不仅仅如此。类除了数据域,还有函数域,即声明了方法,当然,一般其方法是在类外实现的。而结构体没有......
  • 移动/home 分区到其它分区
    今天想装个双系统,可是剩余分区大小又不够,所以只有移动一下home位置,留出更大一块分区空间。还是这个方法有效简单。逐步移动分区的操作方式在这个新的技巧集中,DanielRobbin......