首页 > 其他 > 详细

内存管理

时间:2014-06-30 13:35:00      阅读:373      评论:0      收藏:0      [点我收藏+]

python: 查看内存地址。

bubuko.com,布布扣
1 a=1
2 print a
3 #输出物理内存地址 
4 print id(a) 
5 #输出物理内存地址(十六进制)
6 print hex(id(a))
View Code

内存基础(C语言):

一个程序就是一个进程。

堆、栈、全局/静态存储区和常量存储区。

什么是常量,全局变量,局部变量和全局静态变量?

答:常量:不可更改的,一般用const 或者 define 修饰.

  全局变量:一般用 global 修饰,在函数体外定义的变量,在总个项目有效。

  局部变量:在函数体内定义的变量,在函数体内有效。

  全局静态变量:一般用 static修饰,在本文件内有效,只初始化一次,下一次结果依赖这一次的数据。

全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域,

局部变量存放在内存的栈区。系统会自动释放。

静态存储区,意识就是说程序编译时调用时就已经分配好的内存。进程只要存在就不会被释放。

一般函数对象和结构分配到内存的堆区。一般由程序员手动释放。

 

在Python中,整数和短小的字符,Python都会缓存这些对象,以便重复使用。当我们创建多个等于1的引用时,实际上是让所有这些引用指向同一个对象

bubuko.com,布布扣
 1 #is 判断对象内存是否相等
 2 # True
 3 a = 1
 4 b = 1
 5 print(a is b)
 6 print(id(a),id(b))
 7 
 8 # True
 9 a = "good"
10 b = "good"
11 print(a is b)
12 print(id(a),id(b))
13 # True
14 a = "very good morning"
15 b = "very good morning"
16 print(a is b)
17 print(id(a),id(b))
18 # False
19 a = []
20 b = []
21 print(a is b)
22 print(id(a),id(b))
View Code

在Python中,每个对象都有存有指向该对象的引用总数,即引用计数(reference count)。

我们可以使用sys包中的getrefcount(),来查看某个对象的引用计数。需要注意的是,当使用某个引用作为参数,传递给getrefcount()时,参数实际上创建了一个临时的引用。因此,getrefcount()所得到的结果,会比期望的多1。

bubuko.com,布布扣
1 from sys import getrefcount
2 
3 a = [1, 2, 3]
4 print(getrefcount(a))
5 
6 b = a
7 print(getrefcount(b))
View Code

 

 

 

 

内存管理,布布扣,bubuko.com

内存管理

原文:http://www.cnblogs.com/canbefree/p/3813823.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!