[英]can a struct assignment overlap similar to memmove() or is struct assignment like memcpy()?
在標准C庫中復制數據區有兩種不同的功能, memmove()
用於重疊存儲區, memcpy()
用於不相交的非重疊存儲區。
C標准對結構分配的說法如下:
struct thing myThing = {0};
struct thing *pmyThing = &myThing;
myThing = *pmyThing; // assign myThing to itself through a pointer dereference.
結構分配是否遵循memmove()
或memcpy()
或其自身規則的規則,只要涉及重疊的內存區域?
C標准的第6.5.16.1節(“簡單分配”)(從N1548草案中讀取)規定:
在簡單賦值 (
=
)中,右操作數的值將轉換為賦值表達式的類型,並替換存儲在左操作數指定的對象中的值。如果從另一個以第一個對象的存儲方式重疊的對象讀取存儲在對象中的值,則重疊應該是精確的,並且兩個對象應具有兼容類型的合格或非限定版本; 否則,行為未定義。
C標准沒有規定編譯器如何實現簡單賦值。 但如果重疊是精確的並且類型兼容,則允許源和目標之間的重疊。 自我分配(無論是否通過指針)滿足此要求,因此行為是明確定義的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.