gpt4 book ai didi

c - 为什么这个 C 初始化将数组地址设置为零?

转载 作者:太空宇宙 更新时间:2023-11-04 04:25:01 25 4
gpt4 key购买 nike

背景:单片机:MKL26Z128IDE:Kinetis Design Studio 3.0.0

此代码将 usbStringDescriptors 的地址设置为零。

uint8_t usbStringDescriptors[NUM_OF_STRING_DESCRIPTORS][MAX_BYTES_PER_USB_STRING] = {0};
uint8_t manStringDescriptor[MAX_BYTES_PER_USB_STRING] = {0};

...来自列表文件

 225                .LFE57:
227 .global usbStringDescriptors
228 001e C046 .section .bss.usbStringDescriptors,"aw",%nobits
229 .align 2
232 usbStringDescriptors:
233 0000 00000000 .space 198
233 00000000
233 00000000
233 00000000
233 00000000
234 .global manStringDescriptor
235 00c6 0000 .section .bss.manStringDescriptor,"aw",%nobits
236 .align 2
239 manStringDescriptor:
240 0000 00000000 .space 66

...在 map 文件中

 .bss.usbStringDescriptors
0x00000000 0xc8 ./adapter/common/usb_core_ksdk/host/host_iAP.o

bad


这段代码没有。

uint8_t usbStringDescriptors[NUM_OF_STRING_DESCRIPTORS][MAX_BYTES_PER_USB_STRING];
uint8_t manStringDescriptor[MAX_BYTES_PER_USB_STRING];

...来自列表文件

 225                .LFE57:
227 .comm usbStringDescriptors,198,4
228 .comm manStringDescriptor,66,4

good

最佳答案

由于这些数组具有静态存储,因此是否放置 {0} 初始值设定项几乎没有区别。当控件到达 main() 函数时,它们将被初始化为 0

  • 如果您放置初始化程序,数据可能会出现在可执行文件中,使其更大并且加载速度可能更慢,
  • 如果不这样做,数据将位于未初始化 段(也称为 bss 或公共(public)段),并在正常环境中由加载程​​序初始化为 0。

出于上述原因,首选第二个选项。

关于c - 为什么这个 C 初始化将数组地址设置为零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42513919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com