导航:首页 > 软件知识 > 数组存放在程序的哪个段上

数组存放在程序的哪个段上

发布时间:2024-02-29 08:15:09

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

C语言使用的内存是虚拟内存。按照功能的不同在C语言中又将虚拟内存为分三类:栈区、堆区、静态数据区,不管是单一变量还是数组,其内存分配都是这样分的。

在栈区、静态数据区、堆区会有编译器负责分配、操作系统负责管理,程序员可以在堆区使用malloc()来动态分配堆内存的问题。

(1)数组存放在程序的哪个段上扩展阅读

内存的分配和释放注意事项:

1、malloc和free是库函数,不是系统调用

2、malloc实际分配的内存可能会比请求的多---有些编译器分配时是以4字节为单元的

3、不能依赖于不同平台的下的malloc

4、当请求的动态内存无法满足时malloc返回的是NULL

5、当free的参数为NULL时,函数直接返回

② int a=1;和int [] arr={1}; 在内存中是如何存储吗

程序被加载到内存后,计算机以段的方式进行管理程序, 源代码部分被放到 .text 段, 已经初始化的全局变量被放在 .data 段, 未初始化的全局变量放在 .bss 段, 而局部变量则使用堆栈实现。一个变量比如 int a = 1; 被放到哪个段和你定义的位置有关, 如果你是在函数内定义, 则是动态分配的, 当执行到这一句时直接用函数栈的内存来保存该变量, 执行完,函数栈被弹出,数据也就消失了。如果是全局变量则由加载器(负责将程序加载到内存中)提前分配好一块.data和.bss段空间,如果定义时就初始化,则加载器将它放到 .data 区,然后使用硬盘中的程序文件中的初始化数据进行初始化,如果是未初始化数据,则直接给分配,不用初始化哈。这些工作都完成后,开始才执行程序。
程序执行后,因为加载器已经将数据给初始化,我们可以直接访问改值。
至于在内存中是怎么样的存在呢,内存是可以以字节进行随机访问的(所以叫做随机存储器),也就是说我们只要告诉内存某个地址,它就给我们返回改地址的字节数据。一个地址保存一个字节数据。
比如int a = 1; 一般来说int是32位,4字节,那么在内存中会占用4个地址, 但是我们访问的时候只要告诉 cpu该变量的起始地址和大小(编程语言已经自动帮我们实现了,对一个已经定义的变量进行索引,它会自动转成该变量的地址和大小)就可以直接读取完整个变量,数组也一样,只是访问的字节多一些。你可以告诉cpu 数组的首地址, 但是只访问4个字节,那么读取到的是数组的第一个int数据,然后将起始地址再偏移4个字节,再读4个字节,则可以读取到下一个int数据, 这个过程起始被编译器实现了, int [] 就表示数据是以 int 也就是 4字节分配的,当你使用索引 arr[i] 的时候,它会自动按4字节的偏移进行取数据。

阅读全文

与数组存放在程序的哪个段上相关的资料

热点内容
地区品牌代理怎么做 浏览:937
军事智慧工地建设到什么程序 浏览:528
江苏农商银行怎么完善个人信息 浏览:662
代理运营一个月能赚多少钱 浏览:163
阜新房产交易中心在哪里 浏览:256
如何导入网页数据到工作表 浏览:179
合肥市公务员社保信息怎么查 浏览:183
许昌职业技术学院单招面试多少分 浏览:635
怎么当外围代理 浏览:37
我的起源数据币在哪里呢 浏览:178
30万做什么代理 浏览:431
盛德鑫泰估计什么时候上市交易 浏览:255
安徽职业技术学院2020招了多少人 浏览:48
渠道信息系统的职能子系统有哪些 浏览:426
嘉兴海鲜市场怎么走 浏览:879
无钱无技术该做点什么 浏览:207
什么是技术能力和沟通能力 浏览:611
什么是先刑事后民事审理程序 浏览:929
手撕鸡怎么打开市场 浏览:582
小米如何数据备份到电脑 浏览:971