--递归本质 函数调用是通过栈(stack)这种数据结构实现的 每当进入一个函数调用,栈区就会加一层栈帧, 每当函数返回,栈区就会减一层栈帧,但栈区空间有限,要注意防止栈溢出 # 递归函数:在函数内部,自己调用其自身即是递归函数# 递归最简易的原型 """ 递归非常占用内存空间,使用递归如果层级过大 ...
分类:
编程语言 时间:
2018-07-28 18:31:13
阅读次数:
176
记录++之前先记一下左右值和存取数据的问题 数据的存放分三个部分,堆区,栈区和静态变量区 左值可以更改,右值不能更改 栈区和堆区存储的都是左值,可以随意更改其值,静态变量区部分数据是右值,比如const修饰的值,函数创建的临时变量,都不可更改 前缀++重载,直接直接++操作,返回本身即可 后缀++重 ...
分类:
编程语言 时间:
2018-07-28 00:15:52
阅读次数:
158
JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method) 栈区: 每个线程包含一个栈区,栈中只保存方法中(不包括对象的成员变量)的基础数据类型和自定义对象的引用(不是对象),对象都存放在堆区中 每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。 栈分 ...
分类:
编程语言 时间:
2018-07-18 20:31:10
阅读次数:
153
一、内存基本构成可编程内存在基本上分为这样的几大部分:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。 静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。 栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建 ...
分类:
编程语言 时间:
2018-07-07 23:59:23
阅读次数:
295
JVM方面 JVM内存结构 堆、栈、方法区、直接内存、堆和栈区别 Java内存模型 内存可见性、重排序、顺序一致性、volatile、锁、final 垃圾回收 内存分配策略、垃圾收集器(G1)、GC算法、GC参数、对象存活的判定 JVM参数及调优 Java对象模型 oop-klass、对象头 Hot ...
分类:
编程语言 时间:
2018-07-02 15:35:38
阅读次数:
206
JVM ---------- java virtual machine. java runtime data area . 1.method area 方法区 共享 2.java stack 栈区, 线程 非共享 压入stack frame(method frame... ...
分类:
编程语言 时间:
2018-06-25 17:52:30
阅读次数:
195
栈区与堆区 block本身是像对象一样可以retain,和release。但是,block在创建的时候,它的内存是分配在栈(stack)上,而不是在堆(heap)上。他本身的作于域是属于创建时候的作用域,一旦在创建时候的作用域外面调用block将导致程序崩溃。使用retain也可以,但是block的 ...
分类:
其他好文 时间:
2018-06-22 19:32:52
阅读次数:
259
【前言】前面有一篇文章介绍了堆区栈区的区别。栈区的核心主要集中在操作一个栈结构,一般由操作系统维护。堆区,主要是我们程序员来维护,核心就是动态内存分配。 一、动态内存分配器 虽然低级的mmap和munmap函数来创建和删除虚拟内存区域,但是C程序运行时在需要额外的存储空间时,一般会使用动态存储器分配 ...
分类:
其他好文 时间:
2018-06-16 14:30:45
阅读次数:
258
一、C++占用内存分配 1)、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2)、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表, ...
分类:
编程语言 时间:
2018-05-18 22:15:23
阅读次数:
182
C/C++编译的程序所占用内存区域一般分为以下5个部分: (1)栈区(stack):由编译器自动分配和释放,用来存放函数的参数、局部变量等。其操作方式类似于数据结构中的栈。 (2)堆区(heap):一般由程序员分配和释放(通过malloc/free、new/delete),若程序员没有释放,则程序结 ...
分类:
编程语言 时间:
2018-05-17 12:02:19
阅读次数:
158