美文网首页
跟诸子学游戏 c#内存分配

跟诸子学游戏 c#内存分配

作者: 诸子百家谁的天下 | 来源:发表于2018-02-20 13:10 被阅读35次

内存分区:

1:栈    在需要的时候,由编译器分配,在不需要的时候,自动清除.通常认为 EBP和局部变量,函数的调用,函数调用过程中的参数,返回地址,都采用栈的方式存放.不够灵活随意(比如大小).

2:堆    使用new分配,应用程序控制,一个new对应一个delete,如果程序员没有释放掉,操作系统自动回收,足够灵活随意.

3:自由存储区    由malloc等函数分配,由free释放,和堆极其相似.

4:全局/静态存储区.

    5:常量存储区.

🌰简单解释一下这句代码:   int* p=new int[10];

p放在栈上, int数组放在堆上,p存放的是int数组的首地址,指针p也有首地址,这2个首地址不能混淆.

堆和栈的主要区别:

1:管理方式,栈由编译器自动管理,堆由程序员管理时,容易产生内存泄露

2:可分配空间的大小:在32位系统下,堆内存可以达到4G的空间(但一般不会达到,在某一临界点操作系统会直接杀死程序),栈空间大小约1M具体数值在不同平台下会有不同.程序员操作堆,会频繁的进行new/delete,会产生内存碎片,不易管理,效率较低.栈是先进后出的队列,不会有从中间突然断裂出一块内存(这就是内存碎片),效率较高.

3:生长方向,在不同机器下也有不同,debug和release也有不同.一般情况下,对于堆是向上的,对于栈是向下的

4:分配方式:堆是由动态分配的,不存在静态分配.栈可以用静态和动态方式分配

5:分配效率:栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高.堆则是C/C++函数库提供的,它的机制是很复杂的,例如为了分配一块内存,库函数会按照一定的算法(具体的算法可以参考数据结构/操作系统)在堆内存中搜索可用的足够大小的空间,如果没有足够大小的空间(可能是由于内存碎片太多),就有可能调用系统功能去增加程序数据段的内存空间,这样就有机会分到足够大小的内存,然后进行返回。显然,堆的效率比栈要低得多。

相关文章

  • 跟诸子学游戏 c#内存分配

    内存分区: 1:栈 在需要的时候,由编译器分配,在不需要的时候,自动清除.通常认为 EBP和局部变量,函数的调用...

  • 跟诸子学游戏 C#线程

    命名空间 using System.Threading; using System.Threading.Tasks...

  • 跟诸子学游戏 游戏流程

    游戏项目开发流程: 一般一个手机游戏开发都需要立项,在立项确定开发之前一般会进行市场调研。 1.市场调研的工作一般...

  • 跟诸子学游戏 动画

    在unity3d中,有6种动画可以使用 animation animator TimeLine 自定义动画(如:定...

  • 跟诸子学游戏 特效

    三要素:①:元素②:节奏③:色彩.

  • 跟诸子学游戏 游戏系统介绍

    1:渲染系统 2:输入系统 3:声音系统 4:物理系统 5:动画系统 6:人工智能(AI)系统 游戏引擎包括:Un...

  • 跟诸子学游戏 游戏类型

    RPG游戏:角色扮演游戏.经典如最终幻想. ACT游戏:动作游戏,也包含(STG)“射击游戏”和(FTG)“格斗游...

  • 跟诸子学游戏 群组算法

    群组算法:表示一群动物的行为,需要设置一个目标点,主要有分离,队列,聚合3中状态; 分离:物体之间保持的距离较近,...

  • 跟诸子学游戏 Lua基础

    1:使用闭包创建迭代器 2:泛型for保存状态变量和控制变量,将状态变量传入迭代器,进行迭代,这个属于无状态迭代器...

  • 跟诸子学游戏 角色控制

    Slope Limit:坡度限制。该参数用于设置自所控制的游戏对象只能爬上角度小于或等于该参数值的斜坡。 Step...

网友评论

      本文标题:跟诸子学游戏 c#内存分配

      本文链接:https://www.haomeiwen.com/subject/zphgtftx.html