copy vs. uninitialized_copy

本文探讨了STL中copy与uninitialized_copy函数的区别。copy适用于已初始化的目标区域,并通过调用赋值运算符实现复制;而uninitialized_copy则用于未初始化的目标区域,通过调用拷贝构造函数来完成复制过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

copy 是依次调用重载的运算符=,

uninitialized_copy是依次调用拷贝构造函数


如果目标区间是未初始化的,应该用uninitialized_copy, 否则用copy

/* Entry Point */ ENTRY(Reset_Handler) /* Highest address of the user mode stack / _estack = ORIGIN(RAM) + LENGTH(RAM); / end of RAM / / Generate a link error if heap and stack don’t fit into RAM. These numbers affect the USED size of RAM / _Min_Heap_Size = 0x100; / required amount of heap: 256 bytes / _Min_Stack_Size = 0x200; / required amount of stack: 512 bytes */ /* Specify the memory areas */ MEMORY { /RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 3K/ FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 24K RAM (rw) : ORIGIN = 0x20000000, LENGTH = 3K } /* Define output sections / SECTIONS { / SRAM vector table */ .ram_vector : { *(.ram_vector) } >RAM /* The startup code goes first into FLASH / .isr_vector : { . = ALIGN(4); KEEP((.isr_vector)) /* Startup code */ . = ALIGN(4); } >FLASH /* The program code and other data goes into FLASH / .text : { . = ALIGN(4); (.text) / .text sections (code) / (.text) / .text sections (code) */ (.glue_7) / glue arm to thumb code */ (.glue_7t) / glue thumb to arm code */ *(.eh_frame) KEEP (*(.init)) KEEP (*(.fini)) . = ALIGN(4); _etext = .; /* define a global symbols at end of code */ } >FLASH /* Constant data goes into FLASH / .rodata : { . = ALIGN(4); (.rodata) / .rodata sections (constants, strings, etc.) / (.rodata) / .rodata sections (constants, strings, etc.) */ . = ALIGN(4); } >FLASH .ARM.extab : { (.ARM.extab .gnu.linkonce.armextab.*) } >FLASH .ARM : { __exidx_start = .; (.ARM.exidx) __exidx_end = .; } >FLASH .preinit_array : { PROVIDE_HIDDEN (__preinit_array_start = .); KEEP ((.preinit_array)) PROVIDE_HIDDEN (__preinit_array_end = .); } >FLASH .init_array : { PROVIDE_HIDDEN (__init_array_start = .); KEEP ((SORT(.init_array.))) KEEP ((.init_array)) PROVIDE_HIDDEN (__init_array_end = .); } >FLASH .fini_array : { PROVIDE_HIDDEN (__fini_array_start = .); KEEP ((SORT(.fini_array.))) KEEP ((.fini_array)) PROVIDE_HIDDEN (__fini_array_end = .); } >FLASH /* used by the startup to initialize data */ _sidata = LOADADDR(.data); /* Initialized data sections goes into RAM, load LMA copy after code / .data : { . = ALIGN(4); _sdata = .; / create a global symbol at data start / (.data) / .data sections / (.data) / .data sections */ . = ALIGN(4); _edata = .; /* define a global symbol at data end */ } >RAM AT> FLASH /* Uninitialized data section / . = ALIGN(4); .bss : { / This is used by the startup in order to initialize the .bss secion / _sbss = .; / define a global symbol at bss start */ bss_start = _sbss; *(.bss) (.bss) *(COMMON) . = ALIGN(4); _ebss = .; /* define a global symbol at bss end */ __bss_end__ = _ebss; } >RAM /* User_heap_stack section, used to check that there is enough RAM left */ ._user_heap_stack : { . = ALIGN(8); PROVIDE ( end = . ); PROVIDE ( _end = . ); . = . + _Min_Heap_Size; . = . + _Min_Stack_Size; . = ALIGN(8); } >RAM /* Remove information from the standard libraries */ /DISCARD/ : { libc.a ( * ) libm.a ( * ) libgcc.a ( * ) } .ARM.attributes 0 : { *(.ARM.attributes) } } 这是完整的链接脚本,请检查是否存在导致warning: test.elf has a LOAD segment with RWX permissions警告的问题
最新发布
07-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值