字符串常量在内存哪个区(java中,字符串,如何存储在内存中的哪个区域)

本文目录
java中,字符串,如何存储在内存中的哪个区域
字符串在java中是不可变序列,每一个双引号的字符串序列都是常量,存在常量池中。但String类型的对象,属于对象范畴,按对象的特性存储。
C语言,字符串指针指向的字符串,那个字符串存储在哪个位置
你要位置,把内存地址都给你打印出来了。然后你怎么又牵扯到常量了?动态申请的变量(即malloc函数申请的变量)存放在堆区!
idxbuf=malloc(6*sizeof(char));
动态随机分配内存空间,共6个char型数据大小的空间,因为是随机的,idxbuf指针指向的内存空间的起始地址在后面的语句中打印出来:
printf("before idxbuf address:%p,idxbuf:%s\n\n",&idxbuf,
&idxbuf:取地址,%p与指针对应,是输出指针的地址。
address:0x7ffeffc9f0b0,就是字符串指针idxbuf指向的字符串存储在内存中的地址位置。
你要字符串指针idxbuf的随机分配的地址,只需要
printf("before idxbuf address:%p\n",&idxbuf);
这一语句就可以了,原来的程序编译有点问题,修改之后通过:
运行结果:
程序先编译后链接,转换成0与1的机器代码后调入内存运行。这个问题被你牵扯到程序运行的内存分配方式,而不是你所说的想找字符串在内存中的地址。请用内存分配方式详解提问!
简单的说,一个程序调入内存后,在内存中分为以下5个部分。
1、栈区(stack)
2、堆区(heap)
3、全局区(静态区)
4、文字常量区
5、程序代码区
内存分配详细不说了,
因为我已经很明确的根据提问回答了字符串存储的位置:address:0x7ffeffc9f0b0。
字符数组存放在哪儿,如chat[] a={’a’,’b’,’c’};是放在栈空间,还是data区
应该是data区
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放(就会造成内存泄漏的问题 ),程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—, 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域(data), 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域(BSS,Block Started by Symbol)。 - 程序结束后有系统释放(在整个程序的执行过程中都是有效的)
4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放 (文字常量区内的数据可以修改吗?)
5、程序代码区(code)— 存放函数体的二进制代码。

更多文章:
avantage怎么设置为中文(Avantage安装丢失GIT)
2026年10月15日 03:00
activex控件未注册怎么办(登陆视频监控网页时提示activex控件未注册,怎么解决)
2026年10月14日 20:30
excel连接sql数据库教程(excel怎么连接sql数据库)
2026年10月14日 19:40






