C语言中结构体在内存中的存储方式?
看例子:main.cppinta=0;全局初始化区char*p1;全局未初始化区main(){intb;栈chars[]="abc";栈char*p2;栈char*p3=...
看例子:
main.cpp
int a = 0; 全局初始化区
char *p1; 全局未初始化区
main()
{
int b; 栈
char s[] = "abc"; 栈
char *p2; 栈
char *p3 = "123456"; 123456\0在常量区,p3在栈上。
static int c =0; 全局(静态)初始化区
p1 = (char *)malloc(10); 堆
p2 = (char *)malloc(20); 堆
}
这是C中变量储存情况, 那么定义一个结构体,结构体内部成员有各种类型,它是什么储存方式呢? 它的内存连续吗
看资料上说“堆”内存不连续,可用malloc()函数申请 ,能否具体说明如何不连续法吗,假设堆中有一个地址0X1000,那么它的下一个地址不一定是0X1001,是这样吗?
傲世修罗王 能说的具体点吗,谢谢。 展开
main.cpp
int a = 0; 全局初始化区
char *p1; 全局未初始化区
main()
{
int b; 栈
char s[] = "abc"; 栈
char *p2; 栈
char *p3 = "123456"; 123456\0在常量区,p3在栈上。
static int c =0; 全局(静态)初始化区
p1 = (char *)malloc(10); 堆
p2 = (char *)malloc(20); 堆
}
这是C中变量储存情况, 那么定义一个结构体,结构体内部成员有各种类型,它是什么储存方式呢? 它的内存连续吗
看资料上说“堆”内存不连续,可用malloc()函数申请 ,能否具体说明如何不连续法吗,假设堆中有一个地址0X1000,那么它的下一个地址不一定是0X1001,是这样吗?
傲世修罗王 能说的具体点吗,谢谢。 展开
6个回答
展开全部
malloc本身申请的内存是连续的,比如malloc(11),他申请了11个连续的内存单元。
你说的“‘堆’内存不连续”,这句话很笼统,那要看那个‘堆’具体是如何实现的。你可是设计一个连续内存的堆,也可以设计链表类型的堆
c中变量的存储方式,最终是由编译器决定的,不同的语言,组织方式都不一样。
--------------------------------
想有深入的理解,可以学习汇编,观察汇编程序最终生成的执行文件,内存使用和组织方式。。。之后,心里基本就有低了。。这些一句话解释不清,还有一个漫长的学习过程
你说的“‘堆’内存不连续”,这句话很笼统,那要看那个‘堆’具体是如何实现的。你可是设计一个连续内存的堆,也可以设计链表类型的堆
c中变量的存储方式,最终是由编译器决定的,不同的语言,组织方式都不一样。
--------------------------------
想有深入的理解,可以学习汇编,观察汇编程序最终生成的执行文件,内存使用和组织方式。。。之后,心里基本就有低了。。这些一句话解释不清,还有一个漫长的学习过程
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询