㈠ c语言内存问题
答案是C
p1是存储在栈区
p2这个指针是存储在堆区的,因为p2是malloc分配的空间
"123456"是一个常量,所以它是存储在常量区的,并不是存储在栈区
栈区和堆区方向是相反的,一个向下增长,一个向上递减。
㈡ C或C++程序编译时内存分为几个存储区
1、从操作系统原理的角度来看,只有一个存储区就是虚拟内存。
2、根据功能可以分为 ,栈区 、堆区、静态区, 栈区一般指的一个函数局部变量,在编译原理中这叫做一个栈帧。 堆区一般是为了用户自由分配的,一般C语言中用MALLOC函数分配,C++中用NEW运算符来分配,它是有操作系统的堆管理器来管理的,拿windows来说,在一个程序运行后,一般至少有两个默认的堆,一个是new堆,一个进程 自己的堆, 静态区,这个一般是全局变量或者static变量使用的区域,这个区域,如果你对PE结构熟悉,就会明白这实际上是pe 区段中的.data区段,当程序运行后变成进程,这个区段是直接内存文件映射过去的。
㈢ c语言哪些占程序空间哪些占内存空间
一个由C/C++编译的程序占用的内存分别为以下四个部分:
程序代码区:存放程序的二进制代码。
静态数据区:存放程序运行期间用到的数据。其存储空间是在编译时分配的,在整个程序执行期间静态数据区中的数据一直存在,程序结束后由系统释放。
动态内存区(也称栈):也存放程序运行期间用到的数据,其存储空间在程序运行期间由编译器自动分配释放,其生命周期短于程序的运行期。
堆区:由程序员分配释放,若程序员不释放,程序结束时可能由系统回收。
以上内容抄自课本《C语言与程序设计》(电子工业出版社)
㈣ 在c语言中 占用的内存
在c语言中指针是一个unsigned
类型的无符号数,其所占内存字节一般是和计算机的cpu字长是一致的,拿32位计算机来说,指针所占的内存空间一般为4个字节,不管char
*还是int
*抑或是float
*,都是4个字节。
程序员可以使用sizeof运算符获取数据类型或者某个变量的内存所占字节数。比如
printf("%d\t%d\t%d\n", sizeof(char *), sizeof(int *), sizeof(float *));
㈤ C语言编译成功的代码显示的内存数是什么单位的
兄弟你还没有写明调用哪个函数和调用的参数!
㈥ C或C++程序编译时内存分为哪5个存储区呢
我想很多人也是糊涂,以下文章写得很好,故全文转来,慢慢体会。 程序的内存分配(堆和栈区别) 一、预备知识 程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack) 由编译器自动分配释放 ,存放函数的参数值,局...
㈦ C语言运行的内存要求是哪三个是不是程序代码区,静态存储区和动态存储区。求高人路过
一个由c/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放 4、文字常量区—常量字符串就是放在这里的。 程序结束后由系统释放5、程序代码区—存放函数体的二进制代码。
㈧ c语言内存有几种分配方式
基本上C程序的元素存储在内存的时候有3种分配策略:
静态分配
如果一个变量声明为全局变量或者是函数的静态变量,这个变量的存储将使用静态分配方式。静态分配的内存一般会被编译器放在数据段或代码段来存储,具体取决于实现。这样做的前提是,在编译时就必须确定变量的大小。 以IA32的x86平台及gcc编译器为例,全局及静态变量放在数据段的低端;全局及静态常量放在代码段的高端
自动分配
函数的自动局部变量应该随着函数的返回会自动释放(失效),这个要求在一般的体系中都是利用栈(Stack)来满足的。相比于静态分配,这时候,就不必绝对要求这个变量在编译时就必须确定变量的大小,运行时才决定也不迟,但是C89仍然要求在编译时就要确定,而C99放松了这个限制。但无论是C89还是C99,都不允许一个已经分配的自动变量运行时改变大小。
所以说C函数永远不应该返回一个局部变量的地址。
要指出的是,自动分配也属于动态分配,甚至可以用alloca函数来像分配堆(Heap)一样进行分配,而且释放是自动的。
动态分配
还有一种更加特殊的情况,变量的大小在运行时有可能改变,或者虽然单个变量大小不变,变量的数目却有很大弹性,不能静态分配或者自动分配,这时候可以使用堆(Heap)来满足要求。ANSI C定义的堆操作函数是malloc、calloc、realloc和free。
使用堆(Heap)内存将带来额外的开销和风险。