不同编程语言中同一变量的内存分配是否一致?以Python字符变量为例
为什么其他语言检测
s='a'的内存占用不会和Python的50字节相同? 不会得到相同的50字节结果,核心原因是不同编程语言对字符串的实现机制、内存模型完全不同:
Python中s='a'占50字节的原因
Python里的字符串是完整的对象,sys.getsizeof()返回的是整个字符串对象的总大小,除了存储字符'a'本身,还包含了Python对象的通用元数据:
- 引用计数(用于垃圾回收)
- 对象类型指针
- 字符串长度
- 其他内部维护的字段
这些额外开销加起来,才让单个字符的字符串占用了50字节(这个数值还可能随Python版本、操作系统位数变化,比如32位Python里会更小)。
其他语言的差异举例
- C语言:如果用
char c = 'a',仅占用1字节(直接存储ASCII字符,无额外对象开销);即使是字符串字面量char* s = "a",也只占用2字节(字符'a'加终止符\0),加上指针本身的8字节(64位系统),总大小也远小于50。 - Java:
String s = "a"的内存占用由String对象头、char数组引用、哈希值,以及底层存储字符的char数组共同组成,在64位JVM开启指针压缩的情况下,总大小大概在40字节左右,和Python的50字节不同。 - Go语言:字符串是包含指针和长度的结构体,64位系统下结构体本身占16字节,字符
'a'存储在只读内存区占1字节,总内存占用远低于50字节。
你的Python代码
import sys s ='a' print(sys.getsizeof(s))
内容的提问来源于stack exchange,提问作者Jora Karyan
相关产品推荐
相关产品推荐

