变量、参数和内存分配

变量的类型

按作用范围可以把变量分为局部变量和全局变量

参数的类型

实参和形参

变量的内存分配——静态和动态

静态变量的声明关键字:static

动态变量的声明,内存的动态分配可以使用函数malloc(字节数)

栈机制——运行时内存布局(Runtime Memory Layout)

一个程序要运行,就要先将可执行文件装载到计算机内存中。装载是操作系统掌控的,一般而言,操作系统将程序装入内存后,将形成一个随时可以运行的进程空间,改进程空间分四个区域,由上到下为:代码区(code area)、全局数据区(data area)、堆区(heap area)、栈区(stack area);一个运行的程序在内存中表示为这四个空间区域,其中代码区存放程序的执行代码。所谓执行代码就是索引了一个个函数块代码,它由函数定义块的编译得到;全局数据区存放全局数据、常量、文字量、静态全局量和静态局部量;堆区存放动态内存,供程序随机申请试用;栈区存放函数数据区(即局部数据区),它动态地反映了程序运行中的函数状态,其运动轨迹正好用来观察函数的调用和返回,从而研究其函数机制。

时间: 2024-08-18 13:51:24

变量、参数和内存分配的相关文章

函数参数的内存分配

@2012-12-24 [小记] 函数调用未发生时,编译系统并没有给函数的形参分配实际内存空间,因此没有实际的参数值. 只有发生了函数的实际调用时,才给函数的各形参分配存储空间,同时将实参的值依次传递给各形参,函数调用结束后,系统释放形参所占用的存储单元. [参考] <面向对象程序设计与VC++>---陈天华 原文地址:https://www.cnblogs.com/skullboyer/p/10168367.html

了解变量如何在内存上分配存储(一)

1.前言 在编写代码中,我们经常回调用这样或那样的方法(函数),但是我们真的了解各种参数类型在内存上市如何分配的么?不见得,至少在这之前我就不是很了解.我们也许认为这只是一个很小的问题,觉得知道方法是做什么的.会调用方法就行,所以就忽略了这一点.下面就了解一下方法中的参数是如何在内存上分配的.如有不妥之处,还请各位大牛指点. 2.值类型与引用类型的分配 一般来说,值类型是分配在栈中,而引用类型则在堆中分配存储单元.栈在编译的时候就分配好内存空间,在代码中有栈的明确定义,而堆是程序运行中动态分配的

UNIX高级环境编程(15)进程和内存分配 &lt; 故宫角楼 &gt;

故宫角楼是很多摄影爱好者常去的地方,夕阳余辉下的故宫角楼平静而安详. ? 首先,了解一下进程的基本概念,进程在内存中布局和内容. 此外,还需要知道运行时是如何为动态数据结构(如链表和二叉树)分配额外内存的. 一 进程 1 进程和程序 进程:是一个可执行程序的实例. 程序:包含一系列信息的文件,这些信息描述了如何在运行时创建一个进程.包含如下信息: 二进制格式标识:如最常见的ELF格式. 机器语言指令:对程序算法进行编码. 程序入口地址:标识程序开始执行时的起始指令位置. 数据:程序文件包含的变量

JAVA中堆栈和内存分配详解(摘抄)

在Java中,有六个不同的地方可以存储数据: 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中.) 3. 堆:存放所有new出来的对象. 4. 静态域:存放静态成员(static定义的) 5. 常量池:存放字符串常量和基本类型常量(publicstatic final). 6. 非RAM存储:硬盘等永久存储空间 这里我们主

C++变量内存分配及类型修饰符

前言 了解C++程序内存分配,有助于深刻理解变量的初始化值以及其生存周期.另外,变量类型修饰符也会影响到变量的初始化值及其生存周期.掌握了不同类型变量的初始化值及其生存周期,能够让我们设计程序时定义变量时更准确. 内存分配 1.     C++程序的内存布局 现代电脑都是遵循冯诺依曼体系结构,所以C++程序的内存布局也是遵循该体系的.主要包括5个部分,即代码段.数据段.BSS段.堆和栈.. 1.     代码段 代码段(code segment/text segment),通常是指用来存放程序执

【C/C++学院】0819-/类的成员函数与const-mutable /构造与析构/拷贝构造deletedefault以及深浅拷贝/静态成员函数成员变量类在内存的存储默认参数/友元类以及友元函数

类的成员函数与const-mutable 成员函数 Fushu.h #pragma once #include <iostream> class fushu { public: int x; int y; public: fushu(); ~fushu(); void show(); inline void showall(int x, int y);//显式内联 void setxy(int x, int y);//编译器优化,默认隐式内联 void show(int x, int y);

Yarn 内存分配管理机制及相关参数配置

理解Yarn的内存管理与分配机制,对于我们搭建.部署集群,开发维护应用都是尤为重要的,对于这方面我做了一些调研供大家参考. 一.相关配置情况 关于Yarn内存分配与管理,主要涉及到了ResourceManage.ApplicationMatser.NodeManager这几个概念,相关的优化也要紧紧围绕着这几方面来开展.这里还有一个Container的概念,现在可以先把它理解为运行map/reduce task的容器,后面有详细介绍. 1.1  RM的内存资源配置, 配置的是资源调度相关 RM1

C语言变量声明内存分配

转载: C语言变量声明内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)— 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈.程序结束时由编译器自动释放. 2.堆区(heap) — 在内存开辟另一块存储区域.一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 .注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵. 3.全局区(静态区)(static)—编译器编译时即分配内存.全局变量和静态变量

c++中函数中变量内存分配以及返回指针、引用类型的思考

众所周知,我们在编程的时候经常会在函数中声明局部变量(包括普通类型的变量.指针.引用等等). 同时,为了满足程序功能的需要,函数的返回值也经常是指针类型或是引用类型,而这返回的指针或是引用也经常指向函数中我们自己声明的局部变量. 这样,程序在某些情况下就可能存在一定的问题.看似很简单的问题,通过仔细的分析,我们就能够更好的理解c++中内存分配和释放的问题. 好,废话不多说,我们进入正题.首先,简单介绍一下程序的内存区域的分配: 程序的内存分配 ①堆区(heap).这一部分主要是由程序开发人员自己