簡體   English   中英

C中的thread_local對象是否初始化為0?

[英]Are thread_local objects initialized to 0 in C?

C中非本地線程存儲時長對象是否初始化為0?

static thread_local int x; // is x initialized to 0?

C17 標准說明如下(在 6.2.4.4 中)。

一個 object 其標識符是用存儲類說明符 _Thread_local 聲明的,具有線程存儲持續時間。 它的生命周期是為它創建的線程的整個執行,它的存儲值在線程啟動時被初始化

它沒有明確地說它被初始化為 0。但是 C++ 標准明確表示並說:(在 3.6.2.2 中)

具有 static 存儲持續時間([basic.stc.static])或線程存儲持續時間([basic.stc.thread])的變量應在任何其他初始化發生之前進行零初始化([dcl.init])

那么,C是否將非本地thread_local對象初始化為0呢?

沒有顯式初始化的線程局部對象被初始化為“零”。

C 2018 7.26.1 3 表示如果包含<threads.h> ,則thread_local擴展為_Thread_local 問題中沒有顯示,但大概是這樣。

C 2018 6.2.4 4 說“一個 object,其標識符使用存儲類說明符_Thread_local聲明,具有線程存儲持續時間......

C 2018 6.7.9 10 說:

…如果沒有顯式初始化具有 static 或線程存儲持續時間的 object,則:

— 如果它有指針類型,它被初始化為一個 null 指針;

— 如果它具有算術類型,則將其初始化為(正數或無符號)零;

— 如果它是一個聚合,則根據這些規則(遞歸地)初始化每個成員,並且任何填充都被初始化為零位;

— 如果是聯合,第一個命名成員根據這些規則(遞歸)初始化,任何填充都初始化為零位;

該段到此結束; 尾隨的“;” 而不是句點是印刷錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM