当前位置:首页 » 编程语言 » c语言的三个区
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言的三个区

发布时间: 2022-05-12 08:08:19

1. 什么是代码区,全局数据区,堆区,栈区我只懂c语言基础,请说得通俗详细一点,,大谢。。

我感觉你还是不要只记概念,这些东西在你以后的学习过程中都会遇到的,比如在学数据结构时就会遇到堆区和栈区,到时候再去掌握也不迟。
不过简单说说吧(因为我也不太懂):
代码区:就是存放你的程序的编译后的可执行代码的地方了
数据区:存放你的程序静态数据,如全局变量、常量等。
栈:在函数调用中,保存程序的当前运行状态、函数的参数、返回结果等。
堆:在分配给一个程序的内存中,除了上面三部分,剩下的就是堆了,也就是程序的自由空间,局部变量(自动变量)等,还有New给指针用的空间,都在这里分配。

在内存空间的顺序是代码区,数据区,堆,栈

2. c语言数组在内存中是怎么分配的

C语言中内存为分三类:栈区、堆区、静态数据区。

局部变量在栈上分配,函数调用前的栈指针,要和函数返回后的栈指针一样,否则就会出错。

void test(void)

{

char i,a[10];

printf("0x%x", &i);

printf("0x%x", a);

printf("0x%x", a+1);

printf("0x%x", a+2);

printf("0x%x", a+3);

}

(2)c语言的三个区扩展阅读

c语言数组在内存分配

示例:

#include<stdio.h>

int main()

{

int a[4] = {11,12,13,14};

int b[4] = {21,22,23,24};

int *pa = &a;

int i = 0;

while(i<8)

{

i++;

printf("now *p value = %d and",*pa);

printf("p addr value = %d ",pa);

pa++;

}

return 0;

}

3. c语言程序的三大区域

不太清楚。

4. C语言程序的三大区域从上到下分别是

C语言程序的三大区域从上到下分别是:依赖库 程序过程 主函数
希望可以帮到你,谢谢!

5. C语言:内存分哪几个区各有什么用

32位操作系统中有4G的虚拟内存,1、os区为系统所占内存 2、栈区auto区的内存是自动分配的,不需要malloc申请 3、堆区需要自己申请所要用的内存,在用的同时,用完之后要用free释放,防止内存泄漏 4、静态区分中有BSS区.文本区.常量区

6. C语言中有无堆的概念

栈,堆,静态区,是内存开辟的三个专属区,C语言的内存分配也就只有这三种方式

1.内存在栈上创建(栈结构)
如函数里定义的变量int i; char str[80],还有保存函数的所有信息的内存都是在栈上创建的
这块内存是连续的,就好比是一个数组,所以你在内存分配的时候,会发现变量地址是连续的

2.内存在堆上创建(链表结构)
这块内存是有很多内存块组成,很像鞭炮一样串在一根绳子上,但这些内存块的大小不一样,存储在链表结构中的结点中,当你用malloc动态申请是,编译器会根据你内存块的大小从表头一次检索,直到链表中的内存块大于等于你所申请的内存大小时,返回该快内存,如果链表上的内存块大于你所申请的内存时,会将多余内存回收到链表结构,这也就是为什么动态申请内存容易造成内存碎片的产生原因。所以分配内存时你会发现他们的地址不连续

3内存在静态区创建
如全局变量,static变量
这块内存也是连续的,也像一个数组,但它跟栈上创建内存唯一的区别是,内存作用时间不一样,静区内存作用时间是整个“程序”运行时间,栈上内存作用时间是整个“函数”的运行时间,注意“程序”和“函数”的区别

而堆内存作用时间范围是0到整个“程序”运行时间,如果你要在小于整个“程序”运行时间内释放这块内存的话,就要使用free,所以是手动申请手动释放,你自己可以控制,但是写代码的好习惯习惯是程序中有几个malloc就有几个free,这样可以防止内存泄露

代码段指的是代码段寄存器,你写的代码存放在这个寄存器里,等待CPU调用,这个属于微机原理所讨论问题,有兴趣可以学学

7. C语言,函数是存储在代码区,想问代码区是栈区吗

代码区是独立的一个区,不属于栈区
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其
操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回
收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的
全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另
一块区域。 - 程序结束后由系统释放。
4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。

8. C语言的三大区域是什么

1、循环,函数,指针。
2、C语言其他重要规则:
(1)C源程序是由一个主函数和若干个其它函数组成的。
(2)函数名后必须有小括号,函数体放在大括号内。
(3)C程序必须用小写字母书写。
(4)每句的末尾加分号。
(5)可以一行多句。
(6)可以一句多行。
(7)可以在程序的任何位置加注释。
一个完整的C语言程序,是由一个main()函数(又称主函数)和若干个其它函数结合而成的,或仅由一个main()函数构成。

9. c语言堆和栈,静态区的理解

楼主问这样的问题,需要澄清平台。比如windows下的与linux下的编译器及很多嵌入式C编译器不同。为什么考虑嵌入式C?原因是目前C语言的很大市场在嵌入式领域。windows下,除了某些特殊需要,java,C++,C#已经优势尽显了。

另外,讨论了半天,q在你代码的那里?我怎么没找到??我眼睛都揉红了也没找见呀
只好表述一下原理
VC下:
1. 函数形参和函数内部非静态局部变量都在栈上分配(所以a,b,p本身都在栈上。但p指向的内容在堆上。q在哪里,我找不到)。
栈的分配的方法是:sp-=字数。
sp是堆栈指针。”字数“是说:你分配一个字节的局部变量,编译器也给你一个字的长度的空间。原因是,堆栈是具有字长度的。16位、32位机器下,字长度为16,64位机器下,字长度为32.
而且,windows下,栈是从高地址向低地址增长的。为什么?栈与堆共享空间,并且,堆从低向高长,栈从高向低长,降低溢出风险。

静态区名字本身就说明了他的特性:静止的,不随程序的运行变化。也就是相对的说,堆和栈都是动态的。静态区是编译器在编译时指定长度、链接时定位地址、windows载入器载入时分配内存。
这里的动与静是编译器和链接器的说法,是语言层面。不适用于系统层面。Windows随时可能将任何用户程序程序的全部资源“请出”内存,也可重新载入,此时,什么静都是浮云。

还有返回值。楼主的main不返回值编译器会警告你的。返回值存在什么地方?
答案是寄存器里AX(EAX,DX,EDX等)。

嵌入式系统里可能这些都不适用。比如,某些嵌入式处理器的形参直接使用寄存器(R0~R15,或A、B等)

10. C语言和C++的区别

C语言与C++的区别有很多,下面是简要概述:

1、面向不同

C语言是面向过程的,

C++是面向对象的。

函数库

C语言有标准的函数库,它们松散的,只是把功能相同的函数放在一个头文件中;

C++对于大多数的函数都是有集成的很紧密,特别是C语言中没有的C++中的API是对Window系统的大多数API有机的组合,是一个集体。但你也可能单独调用API。

3、结构概念不同

C言中结构只有成员变量,而没成员方法,C语而在但是在C语言中结构的成员是公共的,什么想访问它的都可以访问;

C++中结构中,它可以有自己的成员变量和成员函数。

4、写作数量不同

C语言可以写很多方面的程序,

C++可以写得更多更好,C++可以写基于DOS的程序,写DLL,写控件,写系统。

5、组织不同

C语言对程序的文件的组织是松散的,几乎是全要程序处理;

C++对文件的组织是以工程,各文件分类明确。