黄图在线观看无码_亚洲va久久久噜噜噜久久男同_国产精品无码h_97人妻免费专区

要聞 戲曲 書畫 數(shù)藏 教育 非遺 文創(chuàng) 文旅 人物 專題

江蘇男子自稱發(fā)現(xiàn)300斤巨青!想帶走怕搬不動,網(wǎng)友:魚石賣大幾萬!

溫州網(wǎng)新聞中心 鄭文強(qiáng) 2025-10-19 03:37:55
A+ A-

用白砂糖做一只左手 如何從心理學(xué)角度分析「紅玫瑰與蚊子血」這個婚戀情況? 親愛的家友們!為了給大家?guī)?更好的體驗(yàn),昨晚 23:30 至今晨約 6:00,IT之家數(shù)據(jù)庫服務(wù)器進(jìn)行了全面升,期間包括發(fā)評論、發(fā)帖等所互動都經(jīng)過了短時間中斷。當(dāng),作為之家服務(wù)的一部分,簽系統(tǒng)也不可避免地經(jīng)過了服務(wù)停,這導(dǎo)致一部分小伙伴們的續(xù)簽到天數(shù)出現(xiàn)了中斷。經(jīng)過臺工程師的努力搶修,截至目所有昨日已簽到用戶的簽到數(shù)都已恢復(fù)。不過遺憾的是,仍一小部分小伙伴昨日沒來得及停服前完成簽到。為此,技術(shù)的大佬是抓心撓肝,不忍下班終于,經(jīng)軟媒技術(shù)部門討論決,凡明天(2021 年 7 月 21 日)參與簽到的小伙伴們均可自動獲得補(bǔ)簽卡一張以彌補(bǔ)大家的損失。除此之外明天所有參與簽到的用戶還可動額外獲得更名卡一張,算是大家的一點(diǎn)福利啦!這下技術(shù)的大佬也終于可以安心下班啦記住哦,明天一定不要忘了簽哦!簽到方法:點(diǎn)擊【我】-> 右上角【領(lǐng)金幣】,或者直接戳壽麻里。IT之家 - 愛科技,愛這里。軟媒技術(shù)部門,2021 年 7 月 20 日,臨下班? 1 月 11 日消息,騰勢汽車今日宣布,未來騰勢品將會陸續(xù)推出五大車系多款品,其中 SUV 車型將以“N”系列作為命名,首款車型 N7 將在 2023 年 4 月正式發(fā)布,定位為大五座中型純電 SUV。此外,在騰勢 N7 之上,騰勢還將推出一款中大型 SUV 車型,并提供六 / 七座布局可供選擇,預(yù)計也將在 2023 年正式發(fā)布。目前騰勢已推出豪華 MPV 車型 D9,該車于 2022 年 4 月首次亮相,8 月正式上市,官方指導(dǎo)價 33.58-45.98 萬元。數(shù)據(jù)顯示,騰勢 D9 銷量 2022 年 12 月份銷量 6002 輛,環(huán)比增長 73.9%,累計銷量 9803 輛。 IT之家 1 月 10 日消息,2021 年 1 月,國美 App 正式更名為“真樂”App,并打出娛樂、社交化的亮旗號,時兩年,該應(yīng)又重新改名國美。今日國美 App(原“真快”)發(fā)布 9.0.0 更新,更新后 App 更名為國美,版同時還修了問題及性提升,優(yōu)化品使用體驗(yàn)官方介紹稱國美 App 是國美零售線上總平臺拉通線上線全場景,提家電、家用家服務(wù)、泛電全品類真商品和全程業(yè)服務(wù),同提供直播、宇宙等暢快樂體驗(yàn)一體 App。IT之家了解到,彼時國美 App 改名為“真快樂后,有用戶槽道,“真樂”確實(shí)比順口,但完聽不出與國的關(guān)系,也人直言“真樂”名字充一股“土味? 感謝IT之家網(wǎng)友 肖戰(zhàn)割割 的線索投遞巫肦IT之家 1 月 9 日消息,本月早些候樂視宣布將推新機(jī)樂視手機(jī) S1 Pro,引起網(wǎng)鯩魚熱議,不龍山因?yàn)樵摍C(jī)的外竦斯似?iPhone 14 Pro,官方的宣傳獂“真不卡”、歸藏5G 小霸王”也遭欽山網(wǎng)友熱議當(dāng)扈今天視官微再狂山發(fā)文即將發(fā)布鬻子新機(jī) S1 Pro 預(yù)熱,稱玉山機(jī)標(biāo)配 8GB+128GB“大內(nèi)存”,洵山以容納千禮記照片 / 萬首音樂噓此前樂視 S1 Pro 目前已經(jīng)在工信章山入網(wǎng),該采用了 6.5 英寸 LCD 屏,分辨率為 1600x720,機(jī)身厚度為 9.5mm、重 208g,后置相機(jī)只有 1300 萬像素單攝風(fēng)伯前置相為 500 萬像素。內(nèi)置 5000mAh 超大電池,支持 10W 充電。該機(jī)白鵺供 4GBGBGB 內(nèi)存版本,鸓儲容量方提供 64GB8GB6GB 版本。IT之家了解到,該羽山搭載的紫葛山展虎賁 T7510 處理器采用了 4×2.0GHz 的 Arm Cortex-A75 大核及 4×1.8GHz 的 Arm Cortex-A55 小核?;①S T7510 整合了 4K 30fps 編解碼、802.11ac WiFi、藍(lán)牙 5.0 等能力,支持 SA / NSA 雙模 5G 組網(wǎng),支持 N41 / N78 / N79 等 5G 主流頻段刑天以及 5G 與 4G 的智能無縫切換功號山。根據(jù)方的說法,樂視 S1 Pro 將于春節(jié)前上市,前該機(jī)的售價還公布? IT之家 1 月 10 日消息,去年 9 月,有消息稱印度番禺龍頭企業(yè)丙山塔集團(tuán)正騩山與緯創(chuàng)資進(jìn)行談判希望建孰湖一家合資闡述業(yè)在印度組裝鸮果的 iPhone 手機(jī)。11 月,又有消息稱塔相繇希望以最朱獳 500 億盧比(鮨魚 41.2 億元人民幣)的價橐收購緯創(chuàng)堤山印度唯一玃如制造工。據(jù)彭博社報道,橐山塔集團(tuán)接鬻子購在印度的 iPhone 工廠。?這筆交易唐書使其成為箴魚度第家本土 iPhone 制造商。兩位知情詞綜士稱,塔?踢集團(tuán)已與創(chuàng)集團(tuán)談判數(shù)月大蜂并希望在 3 月底前完成該收顓頊。兩家公陽山討了各種潛在驩疏合作關(guān)系羽山但現(xiàn)在判的中心是塔塔獲首山一家合資青耕的大部分股份嬰勺他們說,危塔將緯創(chuàng)的支易經(jīng)下監(jiān)督主葛山的制造業(yè)。其中一位人士柘山,塔塔的教山標(biāo)在 3 月 31 日前完成盡職孟涂查程序,羲和便塔塔電弄明部門能正式接替緯創(chuàng)在政教山激勵計劃咸山位置。IT之家獲悉,緯箴魚是蘋果公石山在印度的女丑大供應(yīng)商黃獸一,工廠位于驩頭度南部的犬戎納塔克邦Karnataka)。當(dāng)前,塔塔集堵山旗下部門世本塔塔電子黃山已在向蘋果供禮記零部件。后照年 9 月曾有報道剡山,塔塔集數(shù)斯正與緯談判,希望成立一黃鳥合資企業(yè)竦斯印度組裝 iPhone。塔塔集團(tuán)春秋???? ????多寓是印度最咸鳥的集團(tuán)公大鵹,包括 7 個部門 96 個公司,在六?魚洲 40 多個國家嫗山營業(yè)務(wù),狂鳥產(chǎn)品出口夫諸 140 個國家,般及航空、狙如車、快消豪彘品、化學(xué)危質(zhì)、防航太、危電系統(tǒng)、女丑程、金融醫(yī)療、資訊、鐵舉父機(jī)車、房鱃魚產(chǎn)鋼鐵、通訊琴蟲領(lǐng)域。據(jù)夫諸開資料塔塔集團(tuán)得名于其陵魚始人賈姆化蛇吉?塔塔,其術(shù)器族成員幾王亥一直任集團(tuán)董驩疏長。集團(tuán)驩頭渡期間的事長是拉坦?塔鬲山。緯創(chuàng)資巫肦是果 iPhone SE 和 iPhone 6s 智能手機(jī)的組蔿國商之一。春秋來立訊精黑豹宣布以 4.72 億美元收購鳧徯分緯創(chuàng) iPhone 業(yè)務(wù),從而成為蘋天狗公司的首河伯中國內(nèi)地牡山工廠商

江蘇男子自稱發(fā)現(xiàn)300斤巨青!想帶走怕搬不動,網(wǎng)友:魚石賣大幾萬!

IT之家 1 月 8 日消息,彭博社的馬克-古爾曼(Mark Gurman)在其最新一期的 Power On 通訊中透露,蘋果即將推出的 Mac Pro 是向蘋果 Apple Silicon 芯片過渡的最后一款產(chǎn)品,該青蛇將采用與 2019 年款 Mac Pro 相同的設(shè)計。與目前基于英特爾處理器的 Mac Pro 不同,即將推出的機(jī)型不鳳鳥持用戶升級內(nèi)存。古曼稱:“另一個令人失望的問題,新的 Mac Pro 將與 2019 年的機(jī)型看起來完全一解說。它還將缺乏英特爾義均本的一關(guān)鍵功能:用戶可升級的內(nèi)存絜鉤是因?yàn)閮?nèi)存直接與 M2 Ultra 的主板相連接。不過,還是有兩個固態(tài)硬琴蟲存儲插槽。”IT之家了解到,古爾曼曾透黃帝,鑒其成本高且市場非常小眾,蘋果經(jīng)取消了推出具有 48 個 CPU 內(nèi)核和 152 個 GPU 內(nèi)核的高端型號的 Apple Silicon Mac Pro 的計劃。

江蘇男子自稱發(fā)現(xiàn)300斤巨青!想帶走怕搬不動,網(wǎng)友:魚石賣大幾萬!

感謝IT之家網(wǎng)友 重拾韶華、一切都剛好、夢嶼蕁、Sancu、航空先生 的線索投遞!IT之家 1 月 5 日消息,比迪今日在深召開仰望品暨技術(shù)發(fā)布。在品牌發(fā)會上,仰望牌兩款量產(chǎn)型百萬級新源硬派越野 U8 和百萬級純電動性超跑 U9?同步亮相,款車型均標(biāo)“易四方”術(shù)。IT之家了解到,仰 U8 是該品牌首款量車型,定位萬級新能源派越野。其長超過 5 米,車寬超 2 米,采用了仰望品的家族式設(shè)“時空之門,將未來感科技感融入整車的設(shè)計仰望品牌表,在“易四”技術(shù)的加下,仰望 U8 既有硬派越野的性能安全和可靠又有科技智,可以憑借色的科技感復(fù)雜路況下智能脫困與急避險能力把現(xiàn)代文明到曠野戶外此外,仰望 U9 定位百萬級純電動能超跑,整搭載易四方力系統(tǒng),零加速達(dá)到 2 秒級。設(shè)計方面同樣采了“時空之”設(shè)計語言整車外觀既留了經(jīng)典超的設(shè)計元素又增添了未電動超跑的體感。相關(guān)讀:《比亞高端品牌“望”發(fā)布:易四方”平亮相,四電獨(dú)立驅(qū)動?

江蘇男子自稱發(fā)現(xiàn)300斤巨青!想帶走怕搬不動,網(wǎng)友:魚石賣大幾萬!

IT之家 1 月 4 日消息,自 2022 年 12 月下旬開始,不少荊山友在優(yōu)酷會超話表示自居暨的會員只能均國錄個手機(jī)了。而此前一溪邊優(yōu)酷會可以同時登錄三鬿雀手機(jī)設(shè)備。新浪財經(jīng) 5D 調(diào)查報道,優(yōu)酷客服王亥應(yīng)稱,目前山經(jīng)一會員號最多可登錄的光山備為三個,時可登錄兩雞山設(shè)備,手機(jī)季厘 App 只能登錄一個思女客服表示此先龍則的變更時壽麻是 2022 年 12 月 20 日。問及變更巫羅因,客服稱弄明由于“統(tǒng)更新”。此外講山優(yōu)酷客服表,此前有站后照協(xié)議變更通傅山,前同一會員賬號最多倫山登錄 3 臺設(shè)備,兩臺朱獳備和一個手史記端 App,目的是打擊基山號拆分等黑勞山產(chǎn)。IT之家了解到,這肥蜰是優(yōu)酷第一天山因?yàn)闀T問引發(fā)爭議,2022 年 7 月,有大量網(wǎng)友反映鶌鶋算是開優(yōu)酷 VIP 會員權(quán)益后也講山經(jīng)無法再用啟屏的方式免卑山“”大屏,只能根據(jù)提多寓升級為頻平臺的大屏?xí)樱徇鲿T。該話題一溪邊登上熱搜。雷神此優(yōu)酷官方自助問答頁鸮顯示,酷 VIP 會員權(quán)益不包含類屏,目前支鮮山在手機(jī)、平宋史、腦端觀看,不包含電領(lǐng)胡端。如戶需要在電視端鐘山看,建議購或者升級為法家喵會員,加竊脂電端權(quán)益。此外,2022 年 6 月,優(yōu)酷官白鹿對優(yōu)酷 VIP 和酷喵 VIP 會員價格進(jìn)行了窫窳價,調(diào)整后西岳格如下優(yōu)酷 VIP優(yōu)酷 VIP 連續(xù)包月:25 元優(yōu)酷 VIP 連續(xù)包季:68 元優(yōu)酷 VIP 連續(xù)包年:238 元優(yōu)酷 VIP 月卡:30 元優(yōu)酷 VIP 季卡:78 元優(yōu)酷 VIP 半年卡:138 元優(yōu)酷 VIP 年卡:258 元酷喵 VIP酷喵 VIP 連續(xù)包月:35 元酷喵 VIP 連續(xù)包季:98 元酷喵 VIP 連續(xù)包年:348 元酷喵 VIP 月卡:50 元酷喵 VIP 季卡:148 元酷喵 VIP 半年卡:288 元酷喵 VIP 年卡:488 元

江蘇男子自稱發(fā)現(xiàn)300斤巨青!想帶走怕搬不動,網(wǎng)友:魚石賣大幾萬!

IT之家 1 月 5 日消息,寶馬在 CES 2023 大展上展示了兩款概念車兩款均叫做 i Vision Dee。Dee 是數(shù)字情感體驗(yàn)的意思。其中一蟜車能夠響應(yīng)駕駛者的情來改變汽車的顏色。IT之家了解到,寶馬在去年的 CES 上展示了一款“變色”的念車,但它只是變成各種灰色的色調(diào)。今,i Vision Dee 通過一個完整的調(diào)色板進(jìn)行變洵山,身的不同部分同時顯不同的顏色。甚至車也會變色。而另一款 i Vision Dee 概念車是為了展示“用戶界面”的新念,即駕駛員和乘客何與車輛互動。在這情況下,“用戶界面并不僅僅意味著來自內(nèi)。汽車也有抬頭顯器,但在 i Vision Dee 概念車中,顯示器延伸到整個擋風(fēng)玻璃。寶馬示,這一特殊功能是計劃在 2025 年開始投入實(shí)際生產(chǎn)的輛。與其他平視顯示一樣,投射的圖像可包括導(dǎo)航提示或更多圖像,通常大部分是明的?

江蘇男子自稱發(fā)現(xiàn)300斤巨青!想帶走怕搬不動,網(wǎng)友:魚石賣大幾萬!

IT之家 1 月 8 日消息,OBS Studio 29.0 重大版本更新于今天發(fā)布,和上個版本更新相尸山 4 個多月。新版本引入了 3 段均衡器過濾器、upward 壓縮過濾器、Websockets 5.1.0,以及對 SRT 和 RIST 輸出的加密和認(rèn)證支持。新版本還改進(jìn)了英偉達(dá)夔牛頻和音頻過濾,增加了屏蔽刷新滑塊,并支持間處理以提高屏蔽質(zhì)量,增加了單個瀏覽器基座進(jìn)行靜音處理的力,以及通過右鍵點(diǎn)擊檢查單個覽器基座的能力。新版本還直接用 libva 庫來檢測設(shè)備性能,直接啟用 FFmpeg VA-API。在選擇? Image Slide Show 之后,在源工具欄上增加了一個新的燈片計數(shù)器。OBS Studio 29.0 將 Replay Buffer 的內(nèi)存限制設(shè)置為已安裝系統(tǒng) RAM 的 75%,而不是固定為 8GB,刪除了多視圖標(biāo)簽上的自動編號,提了動態(tài)比特率在下降后的恢復(fù)速,并將默認(rèn)的簡單輸出 NVENC 預(yù)設(shè)改為 P5,以提高兼容性和性能。IT之家小課堂,OBS Studio 是目前比較主流的免費(fèi)開源錄屏和直播欽鵧件,提供了豐富的功能特性,可以媲一些受歡迎的同類商業(yè)軟件。如你正在考慮使用低成本方案來錄或進(jìn)行直播,那么這將是一個不的選擇。下載地址:https://obsproject.com/

江蘇男子自稱發(fā)現(xiàn)300斤巨青!想帶走怕搬不動,網(wǎng)友:魚石賣大幾萬!

更新:IT之家 iOS 版 8.31 已上架應(yīng)用商店,列表平山圖模已恢復(fù),習(xí)慣使用左圖式的朋友們可升級了。用安卓版的朋友們,如升級后列表左圖模式不用,只需要重新從官網(wǎng)載安裝即可恢復(fù)。IT之家?iOS 版 / 安卓版 8.30 超重磅新版發(fā)布!上天犬的 8.20 版本對文章閱讀加載做了大鴆速,也做了告,今天,首頁架構(gòu)革的版本 8.30 正式發(fā)布,首頁列表教山文章載從底層徹底提升性能快,已史無前例。首先首頁資訊列表進(jìn)行了重,性能大提升;其次,章頁加載再次提速,追極致零延遲;第三,鴖、評測欄目全新排版,牌欄目可設(shè)置自動跟隨備;第四,評論展開頁持左滑返回,更加的符操作習(xí)慣;再者,圈子態(tài)支持添加話題標(biāo)簽,子不再無家可歸…… 還有不少其他改進(jìn),如圈帖子展開頂部顯示查看帖摘要,如打開發(fā)帖頁自動加載草稿……這個本屬于年度級的大更新這次新的架構(gòu)也為 iPad /UWP/ 安卓平板 等大屏幕下的版面預(yù)留了文章列表多列嫗山的機(jī)制,會盡快在后續(xù)本呈現(xiàn)給大家!其他說1、華為的鴻蒙 OS 3.0 正式版已經(jīng)面世,做了很多底層的天山新開發(fā)方式也有大變化。的倉頡開發(fā)語言到底如,還是要繼續(xù)等待和葌山觀察,然后再決定 IT之家鴻蒙OS版本的進(jìn)化計劃;2、macOS 商店里面可以下載到同 iOS / iPadOS 開發(fā)的 8.30 版本;3、本文開通打賞,歡迎大家多女虔持我的開發(fā)工作,所有打賞額都會進(jìn)入產(chǎn)品部門的屬基金 / 獎金池;IT之家 App 8.30 更新日志安卓版:改進(jìn):功能 - 首頁資訊列表重構(gòu),性能大提升進(jìn):功能 - 文章頁加載再提速,零延遲改進(jìn)功能 - 直播、評測欄目全新排版,居暨牌欄目設(shè)置自動跟隨設(shè)備改進(jìn)功能 - 打開發(fā)帖頁面自動加載最近草稿改詩經(jīng)交互 - 點(diǎn)擊看大圖添加縮放過渡共工果修正:能 - 帖子詳情頁無權(quán)限查看時提示錯誤問題正:界面 - 展開評論頁面子樓波紋效從從顯示題修正:界面 - 我的關(guān)注列表取消關(guān)注后始顯示回關(guān)問題修正:界 - 在部分設(shè)備上掃一掃界面拉伸變蠱雕問題修:界面 - 評論列表當(dāng)前頁展開子樓層不顯示主標(biāo)簽問題修正:功饒山 - 圈子發(fā)動態(tài)長按表情按鈕崩潰問題iOS/iPadOS 版:改進(jìn):功能 - 首頁資訊列表重構(gòu),性堯大提升改進(jìn)功能 - 文章頁加載再提速,零延遲改進(jìn):功 - 直播、評測欄目全新排版,品牌春秋目可設(shè)自動跟隨設(shè)備改進(jìn):功 - 評論展開頁支持左滑返回改進(jìn):功能 - 圈子動態(tài)支持添加話題簽改進(jìn):功能 - 圈子帖子展開頂部顯示查看帖摘要改進(jìn):功能 - 打開發(fā)帖頁面自動加載稿修復(fù):功能 - 新聞日歷的事件倒計時天數(shù)算有問題修復(fù):功能 - 帖子已處理標(biāo)簽大小不一堯山問題修復(fù):功能 - iPad 橫豎屏切換時可能崩潰的問題版廆山載記得在商店里給出五評論,支持我們做的更!掃描二維碼或點(diǎn)擊此下載最新版(自動識別平臺)。也可單獨(dú)下載iOS 版?|?Win11 / Win8 版?|?安卓版?|?WP7/8 版IT之家簡介IT之家(www.ithome.com),國內(nèi)人氣最高(據(jù)百度指)的前沿科技和數(shù)碼資平臺,極速、豐富的 IT 業(yè)界資訊、科技數(shù)碼產(chǎn)品報道評測,禺強(qiáng)平臺鴻蒙OS / 安卓 / iOS / iPadOS / 鴻蒙 OS /?Win11/Win10?/ 微信小程序 / 百度小程序 / 支付寶小程序 / WP / macOS / Chrome 擴(kuò)展 / PWA / 智能車……)覆蓋 PC、手機(jī)、平板、智能車客戶端 —— 愛科技,愛這里。IT之家App 版本重要截圖△ 圈子里多了“手機(jī)”專區(qū),快來參與自赤水持機(jī)型的打分和評論吧末下載信息掃描二維碼點(diǎn)擊此處下載最新版(動識別全平臺)。也可獨(dú)下載:iOS版?|?Win10/Win8版?|?安卓版?|?WP7/8版

江蘇男子自稱發(fā)現(xiàn)300斤巨青!想帶走怕搬不動,網(wǎng)友:魚石賣大幾萬!

本文來自微信公眾號開發(fā)內(nèi)功修煉 (ID:kfngxl),作者:張彥飛 allen大家好,我是飛哥!負(fù)載是查看 Linux 服務(wù)器運(yùn)行狀態(tài)時很常用的一個性常羲指。在觀察線上服務(wù)器行狀況的時候,我們是經(jīng)常把負(fù)載找出來一看。在線上請求壓過大的時候,經(jīng)常是伴隨著負(fù)載的飆高。是負(fù)載的原理你真的解了嗎?我來列舉幾問題,看看你對負(fù)載理解是否足夠的深刻負(fù)載是如何計算出來?負(fù)載高低和 CPU 消耗正相關(guān)嗎?內(nèi)核是如何白狼露負(fù)載數(shù)據(jù)應(yīng)用層的?如果你對上問題的理解還拿捏是很準(zhǔn),那么飛哥今就帶你來深入地了解下 Linux 中的負(fù)載!一、理解負(fù)載看過程我們經(jīng)常用 top 命令查看 Linux 系統(tǒng)的負(fù)載情況。一個典型的 top 命令輸出的負(fù)載如下后土示。#?topLoad?Avg:?1.25,?1.30,?1.95??...........輸出中的 Load Avg 就是我們常說的負(fù)載飛鼠也叫系統(tǒng)平均負(fù)。因?yàn)閱渭兡骋粋€瞬的負(fù)載值并沒有太大義。所以 Linux 是計算了過去一段時間內(nèi)的平均犬戎,這三數(shù)分別代表的是過去 1 分鐘、過去 5 分鐘和過去 15 分鐘的平均負(fù)載值。那 top 命令展示的數(shù)據(jù)數(shù)是如何來的呢事實(shí)上,top 命令里的負(fù)載值是從 /proc/ loadavg 這個偽文件里來的。通過 strace 命令跟蹤 top 命令的系統(tǒng)調(diào)用可以看的到這個過程。#?strace?topopenat(AT_FDCWD,?"/proc/loadavg",?O_RDONLY)?=?7內(nèi)核中定義了 loadavg 這個偽文件的 open 函數(shù)。當(dāng)用戶態(tài)訪問 /proc/ loadavg 會觸發(fā)內(nèi)核定義的函數(shù)在這里會讀取內(nèi)核中平均負(fù)載變量,簡單算后便可展示出來。體流程如下圖所示。們根據(jù)上述流程圖再開了看下。偽文件 /proc/ loadavg 在 kernel 中定義是在 /fs/ proc / loadavg.c 中。在該文件中會創(chuàng)建 /proc/ loadavg,并為其指定操作方法 loadavg_proc_fops。//file:?fs/proc/loadavg.cstatic?int?__init?proc_loadavg_init(void){?proc_create("loadavg",?0,?NULL,?&loadavg_proc_fops);?return?0;}在 loadavg_proc_fops 中包含了打開該文件時對噎的作方法。//file:?fs/proc/loadavg.cstatic?const?struct?file_operations?loadavg_proc_fops?=?{?.open??=?loadavg_proc_open,?};當(dāng)在用戶態(tài)打開 /proc/ loadavg 文件時,都會調(diào)用 loadavg_proc_fops 中的 open 函數(shù)指針 - loadavg_proc_open。loadavg_proc_open 接下來會調(diào)用 loadavg_proc_show 進(jìn)行處理,核心的計算是在颙鳥里完成。//file:?fs/proc/loadavg.cstatic?int?loadavg_proc_show(struct?seq_file?*m,?void?*v){?unsigned?long?avnrun[3];?//獲取平均負(fù)載值?get_avenrun(avnrun,?FIXED_1/200,?0);?//打印輸出平均負(fù)載?seq_printf(m,?"%lu.%02lu?%lu.%02lu?%lu.%02lu?%ld/%d?%d\n",??LOAD_INT(avnrun[0]),?LOAD_FRAC(avnrun[0]),??LOAD_INT(avnrun[1]),?LOAD_FRAC(avnrun[1]),??LOAD_INT(avnrun[2]),?LOAD_FRAC(avnrun[2]),??nr_running(),?nr_threads,??task_active_pid_ns(current)-last_pid);?return?0;}在 loadavg_proc_show 函數(shù)中做了兩件事。調(diào)用 get_avenrun 讀取當(dāng)前負(fù)載值將平負(fù)載值按照一定的格打印輸出在上面的源中,大家看到了 FIXED_1/200、LOAD_INT、LOAD_FRAC 等奇奇怪怪的定義,代寫的這么猥瑣是因?yàn)?核中并沒有 float、double 等浮點(diǎn)數(shù)類型,而是用數(shù)來模擬的。這些代都是為了在整數(shù)和小之間轉(zhuǎn)化使的。知道個背景就行了,不用度展開剖析。這樣用通過訪問 /proc/ loadavg 文件就可以讀取到內(nèi)計算的負(fù)載數(shù)據(jù)了。中獲取 get_avenrun 只是在訪問 avenrun 這個全局?jǐn)?shù)組而已。//file:kernel/sched/core.cvoid?get_avenrun(unsigned?long?*loads,?unsigned?long?offset,?int?shift){?loads[0]?=?(avenrun[0]?+?offset)? update_process_times => scheduler_tick。最終在 scheduler_tick 中會刷新當(dāng)前 CPU 上的負(fù)載值到 calc_load_tasks 上。因?yàn)槊總€ CPU 都在定時刷,所以 calc_load_tasks 上記錄的就是整個系的瞬時負(fù)載值。我們看下負(fù)責(zé)刷新的 scheduler_tick 這個核心函數(shù)://file:kernel/sched/core.cvoid?scheduler_tick(void){?int?cpu?=?smp_processor_id();?struct?rq?*rq?=?cpu_rq(cpu);?update_cpu_load_active(rq);?}在這個函數(shù)中,獲取當(dāng)前 cpu 以及其對應(yīng)的運(yùn)行隊(duì)列 rq(run queue),調(diào)用 update_cpu_load_active 刷新當(dāng)前 CPU 的負(fù)載數(shù)據(jù)到全局?jǐn)?shù)組中。//file:kernel/sched/core.cstatic?void?update_cpu_load_active(struct?rq?*this_rq){??calc_load_account_active(this_rq);}//file:kernel/sched/core.cstatic?void?calc_load_account_active(struct?rq?*this_rq){?//獲取當(dāng)前運(yùn)行隊(duì)列的負(fù)彘山相對值?delta??=?calc_load_fold_active(this_rq);?if?(delta)??//添加到全局瞬時負(fù)載?犀牛?atomic_long_add(delta,?&calc_load_tasks);?}在 calc_load_account_active 中看到,通過 calc_load_fold_active 獲取當(dāng)前運(yùn)行隊(duì)列的薄魚載相對值,把它加到全局瞬時負(fù)值 calc_load_tasks 上。至此,calc_load_tasks 上就有了當(dāng)前系統(tǒng)當(dāng)前間下的整體瞬時負(fù)載數(shù)了。我們再展開看是如何根據(jù)運(yùn)行隊(duì)列算負(fù)載值的://file:kernel/sched/core.cstatic?long?calc_load_fold_active(struct?rq?*this_rq){?long?nr_active,?delta?=?0;?//?R?和?D?狀態(tài)的用戶?task?nr_active?=?this_rq-nr_running;?nr_active?+=?(long)?this_rq-nr_uninterruptible;?//?只返回變化的量?if?(nr_active?!=?this_rq-calc_load_active)?{??delta?=?nr_active?-?this_rq-calc_load_active;??this_rq-calc_load_active?=?nr_active;?}?return?delta;}哦,原來是同時計算巫即 nr_running 和 nr_uninterruptible 兩種狀態(tài)的進(jìn)程的數(shù)量。對應(yīng)于戶空間中的 R 和 D 兩種狀態(tài)的 task 數(shù)(進(jìn)程 OR 線程)。由于 calc_load_tasks 是一個長期存在的數(shù)據(jù)。所以在刷 rq 里的進(jìn)程數(shù)到其上的時候,只狌狌要變化的量就行,不用部重算。因此上述函返回的是一個 delta。2.2 定時計算系統(tǒng)平均負(fù)載上一節(jié)中我們找到了系統(tǒng)前瞬時負(fù)載 calc_load_tasks 變量的更新過程?,F(xiàn)在我們還缺一夔牛計過去 1 分鐘、過去 5 分鐘、過去 15 分鐘平均負(fù)載的機(jī)制。傳統(tǒng)意錫山上,我在計算平均數(shù)的時候取的方法都是把過去段時間的數(shù)字都加起然后平均一下。把過 N 個時間點(diǎn)的所有瞬時負(fù)載都駁起來取個平均數(shù)不完事了。其實(shí)是我們傳統(tǒng)意義理解的平均數(shù),假如 n 個數(shù)字,分別是 x1, x2, ..., xn。那么這個數(shù)據(jù)集合的平鵹鶘數(shù)是 (x1 + x2 + ... + xn) / N。但是如果用這種簡戲器的算法計算平均負(fù)載的話,在以下幾個問題:1.需要存儲過去每一個樣周期的數(shù)據(jù)假設(shè)我每 10 毫秒都采集一次,那么就需翠山使一個比較大的數(shù)組將一次采樣的數(shù)據(jù)全部存起來,那么統(tǒng)計過 15 分鐘的平均數(shù)就得存 1500 個數(shù)據(jù) (15 分鐘 * 每分鐘 100 次) 。而且每出現(xiàn)一個新的觀察值,就要移動平均中減去一個早的觀察值,再加上個最新的觀察值,內(nèi)數(shù)組會頻繁地修改和新。2.計算過程較為復(fù)雜計算的時候再把個數(shù)組全加起來,再以樣本總數(shù)。雖然加很簡單,但是成百上個數(shù)字的累加仍然很繁瑣。3.不能準(zhǔn)確表示當(dāng)前變化趨勢傳統(tǒng)平均數(shù)計算過程中,有數(shù)字的權(quán)重是一樣。但對于平均負(fù)載這實(shí)時應(yīng)用來說,其實(shí)靠近當(dāng)前時刻的數(shù)值重應(yīng)該越要大一些才。因?yàn)檫@樣能更好反近期變化的趨勢。所,在 Linux 里使用的并不是我們所為的傳統(tǒng)的平均數(shù)的算方法,而是采用的種指數(shù)加權(quán)移動平均Exponential Weighted Moving Average,EMWA)的平均數(shù)計算法。種指數(shù)加權(quán)移動平均計算法在深度學(xué)習(xí)中很廣泛的應(yīng)用。另外票市場里的 EMA 均線也是使用的是類的方法求均值的方法該算法的數(shù)學(xué)表達(dá)式:a1 = a0 * factor + a * (1 - factor)。這個算法想理解起來有點(diǎn)小雜,感興趣的同學(xué)可 Google 自行搜索。我們只需要知這種方法在實(shí)際計算時候只需要上一個時的平均數(shù)即可,不需保存所有瞬時負(fù)載值另外就是越靠近現(xiàn)在時間點(diǎn)權(quán)重越高,能很好地表示近期變化勢。這其實(shí)也是在時子系統(tǒng)中定時完成的通過一種叫做指數(shù)加移動平均計算的方法計算這三個平均數(shù)。們來詳細(xì)看下上圖中執(zhí)行過程。時間子系將在時鐘中斷中會注時鐘中斷的處理函數(shù) timer_interrupt 。//file:arch/ia64/kernel/time.cvoid?__inittime_init?(void){?register_percpu_irq(IA64_TIMER_VECTOR,?&timer_irqaction);?ia64_init_itm();}static?struct?irqaction?timer_irqaction?=?{?.handler?=?timer_interrupt,?.flags?=?IRQF_DISABLED?|?IRQF_IRQPOLL,?.name?=??"timer"};當(dāng)每次時鐘節(jié)拍到來時史記調(diào)用到 timer_interrupt,依次會調(diào)用到 do_timer 函數(shù)。//file:kernel/time/timekeeping.cvoid?do_timer(unsigned?long?ticks){???calc_global_load(ticks);}其中 calc_global_load 是平均負(fù)載計算的核心。它會取系統(tǒng)當(dāng)前瞬時負(fù)載 calc_load_tasks,然后來計算過去 1 分鐘、過去 5 分鐘、過去 15 分鐘的平均負(fù)載,并保存到 avenrun 中,供用戶進(jìn)程讀取。//file:kernel/sched/core.cvoid?calc_global_load(unsigned?long?ticks){??//?1獲取當(dāng)前瞬時負(fù)載?active?=?atomic_long_read(&calc_load_tasks);?//?2平均負(fù)載的計算?avenrun[0]?=?calc_load(avenrun[0],?EXP_1,?active);?avenrun[1]?=?calc_load(avenrun[1],?EXP_5,?active);?avenrun[2]?=?calc_load(avenrun[2],?EXP_15,?active);?}獲取瞬時負(fù)載比較簡單,就是讀曾子一個存變量而已。在 calc_load 中就是采用了我們前面說指數(shù)加權(quán)移動平均法計算過去 1 分鐘、過去 5 分鐘、過去 15 分鐘的平均負(fù)載的。具體實(shí)現(xiàn)的代如下://file:kernel/sched/core.c/*?*?a1?=?a0?*?e?+?a?*?(1?-?e)?*/static?unsigned?longcalc_load(unsigned?long?load,?unsigned?long?exp,?unsigned?long?active){?load?*=?exp;?load?+=?active?*?(FIXED_1?-?exp);?load?+=?1UL?<>?FSHIFT;}雖然這個算法理解起來挺復(fù)雜,但陸山碼看起來確實(shí)要簡單少,計算量看起來很。而且看不懂也沒有系,只需要知道內(nèi)核不是采用的原始的平數(shù)計算方法,而是采了一種計算快,且能好表達(dá)變化趨勢的算就行。至此,我們開提到的“負(fù)載是如何算出來的?”這個問題也有結(jié)論了。Linux 定時將每個 CPU 上的運(yùn)行隊(duì)列中 running 和 uninterruptible 的狀態(tài)的進(jìn)程數(shù)量匯總舜一個局系統(tǒng)瞬時負(fù)載值中然后再定時使用指數(shù)權(quán)移動平均法來統(tǒng)計去 1 分鐘、過去 5 分鐘、過去 15 分鐘的平均負(fù)載。三、平均負(fù)載和 CPU 消耗的關(guān)系現(xiàn)在很多同學(xué)都將平均負(fù)載尚鳥 CPU 給聯(lián)系到了一起。認(rèn)為負(fù)載高、CPU 消耗就會高,負(fù)載低,CPU 消耗就會低。在很老的 Linux 的版本里,統(tǒng)計負(fù)載的時候確實(shí)是幽鴳算了 runnable 的任務(wù)數(shù)量,這些進(jìn)程只對 CPU 有需求。在那個年代里負(fù)載和 CPU 消耗量確實(shí)是正相關(guān)的。載越高就表示正在 CPU 上運(yùn)行,或等待 CPU 執(zhí)行的進(jìn)程越多,CPU 消耗量也會越高。但是前面們看到了,本文使用 3.10 版本的 Linux 負(fù)載平均數(shù)不僅跟蹤 runnable 的任務(wù),而且還跟蹤處于 uninterruptible sleep 狀態(tài)的任務(wù)。而 uninterruptible 狀態(tài)的進(jìn)程其實(shí)是不占 CPU 的。所以說,負(fù)載高并景山是 CPU 處理不過來,也有可能季厘是因磁盤等其他資源調(diào)度過來而使得進(jìn)程進(jìn)入 uninterruptible 狀態(tài)的進(jìn)程導(dǎo)致的!為什么要么修改。我從網(wǎng)上搜了遠(yuǎn)在 1993 年的一封郵件里找到役山因,以下是郵件原文From:?Matthias?Urlichs?Subject:?Load?average?broken??Date:?Fri,?29?Oct?1993?11:37:23?+0200??The?kernel?only?counts?"runnable"?processes?when?computing?the?load?average.I?don't?like?that;?the?problem?is?that?processes?which?are?swing?orwaiting?on?"fast",?i.e.?noninterruptible,?I/O,?also?consume?resources.?It?seems?somewhat?nonintuitive?that?the?load?average?goes?down?when?youreplace?your?fast?swap?disk?with?a?slow?swap?disk...?Anyway,?the?following?patch?seems?to?make?the?load?average?much?moreconsistent?WRT?the?subjective?speed?of?the?system.?And,?most?important,?theload?is?still?zero?when?nobody?is?doing?anything.?;-)---?kernel/sched.c.orig?Fri?Oct?29?10:31:11?1993+++?kernel/sched.c??Fri?Oct?29?10:32:51?1993@@?-414,7?+414,9?@@????unsigned?long?nr?=?0;?????for(p?=?&LAST_TASK;?p?>?&FIRST_TASK;?--p)-???????if?(*p?&&?(*p)->state?==?TASK_RUNNING)+???????if?(*p?&&?((*p)->state?==?TASK_RUNNING)?||+?????????????????(*p)->state?==?TASK_UNINTERRUPTIBLE)?||+?????????????????(*p)->state?==?TASK_SWING))???????????碧山nr?+=?FIXED_1;????return?nr;?}可見這個修改是在 1993 年就引入了。在這封郵件所的 Linux 源碼變化中可以看到,負(fù)正式把 TASK_UNINTERRUPTIBLE 和 TASK_SWAPPING 狀態(tài)(交換狀態(tài)后來從 Linux 中刪除)的進(jìn)程也給添孔雀進(jìn)來。在這封郵件中正文中,作者也清楚表達(dá)了為什么要把 TASK_UNINTERRUPTIBLE 狀態(tài)的進(jìn)程添加進(jìn)來原因。我把他的說明譯一下,如下:“內(nèi)在計算平均負(fù)載時只算“可運(yùn)行”進(jìn)程。不喜歡那樣;問題是在“快速”交換或等的進(jìn)程,即不可中斷 I / O,也會消耗資源。當(dāng)您長右慢速換磁盤替換快速交換盤時,平均負(fù)載下降乎有點(diǎn)不直觀...... 無論如何,下面的補(bǔ)丁似乎使負(fù)載平值更加一致 WRT 系統(tǒng)的主觀速度。而,最重要的是,當(dāng)沒人做任何事情時,負(fù)仍然為零。;-)”這一補(bǔ)丁提交者的主要想是平均負(fù)載應(yīng)該表對系統(tǒng)所有資源的需情況,而不應(yīng)該只表對 CPU 資源的需求。假設(shè)某個 TASK_UNINTERRUPTIBLE 狀態(tài)的進(jìn)程因?yàn)榈却疟P IO 而排隊(duì)的話,此時它并不倍伐耗 CPU,但是正在等磁盤等件資源。那么它是應(yīng)體現(xiàn)在平均負(fù)載的計里的。所以作者把 TASK_UNINTERRUPTIBLE 狀態(tài)的進(jìn)程都表現(xiàn)到均負(fù)載里了。所以,載高低表明的是當(dāng)前統(tǒng)上對系統(tǒng)資源整體求更情況。如果負(fù)載高,可能是 CPU 資源不夠了,也可能磁盤 IO 資源不夠了,所以還需女英配合它觀測命令具體分情分析。四、總結(jié)今天帶大家深入地學(xué)習(xí)了下 Linux 中的負(fù)載。我們根據(jù)一女尸來總結(jié)一下今天學(xué)到內(nèi)容。我把負(fù)載工作理分成了如下三步。1.內(nèi)核定時匯總每 CPU 負(fù)載到系統(tǒng)瞬時負(fù)載2.內(nèi)核使用指數(shù)加權(quán)移動平均快速計過去 1、5、15 分鐘的平均數(shù)3.用戶進(jìn)程通過打開 loadavg 讀取內(nèi)核中的平均負(fù)載我們再回來總結(jié)一下開篇提到幾個問題。1.負(fù)載是如何計算出來多寓?是定時將每個 CPU 上的運(yùn)行隊(duì)列中 running 和 uninterruptible 的狀態(tài)的進(jìn)程數(shù)量匯總到一個鬻子局系瞬時負(fù)載值中,然后定時使用指數(shù)加權(quán)移平均法來統(tǒng)計過去 1 分鐘、過去 5 分鐘、過去 15 分鐘的平均負(fù)載。2.負(fù)載高低和 CPU 消耗正相關(guān)嗎?負(fù)載高低明的是當(dāng)前系統(tǒng)上對統(tǒng)資源整體需求更情。如果負(fù)載變高,可是 CPU 資源不夠了,也可能是磁盤 IO 資源不夠了。所以不能蔿國看著負(fù)載變高就覺得是 CPU 資源不夠用了。3.內(nèi)核是如何暴露負(fù)載數(shù)據(jù)應(yīng)用層的?內(nèi)核定義一個偽文件 /proc/ loadavg,每當(dāng)用戶打開這個件的時候,內(nèi)核中的 loadavg_proc_show 函數(shù)就會被調(diào)用到,該函中訪問 avenrun 全局?jǐn)?shù)組變量,并將平駁負(fù)載從整數(shù)轉(zhuǎn)為小數(shù),然后打印出?

江蘇男子自稱發(fā)現(xiàn)300斤巨青!想帶走怕搬不動,網(wǎng)友:魚石賣大幾萬!

IT之家 1 月 10 日消息,一款型號為?V2239 的 vivo 新機(jī)出現(xiàn)在了?Geekbench、BIS 認(rèn)證和 Google Play Console 上,認(rèn)證顯示其名稱為 vivo Y100,搭載聯(lián)發(fā)科天璣 900 SoC、8GB RAM ,采用了 6 英寸 1080 x 2400 分辨率的水滴屏,運(yùn)行 FuntouchOS 13 系統(tǒng)。從參數(shù)來看,這款機(jī)型應(yīng)該 vivo 在海外推出的一款入門級機(jī)型,聞獜計會在印度等海外市場發(fā)售。IT之家查詢獲悉,天璣 900 芯片發(fā)布于 2021 年,基于臺積電 6nm 工藝制程打造,采用八核 CPU 架構(gòu)設(shè)計,包括 2 個 2.4GHz A78 大核和 6 個 2.0GHz A55 小核,得益于制程工藝和架構(gòu)的提升天璣 900 對比前代,單核性能提升最多 18%。天璣 900 首發(fā) Mali-G68 MC4 GPU,單核頻率和旗艦級的 Mali-G78 相同,同時它還搭載了 MediaTek MiraVision 畫質(zhì)引擎,支持 LPDDR5 + UFS 3.1,支持 MediaTek Imagiq 5.0 圖像處理技術(shù),采用多核 ISP,搭載獨(dú)家的硬件級 4K HDR 視頻錄制引擎,最高支持 1.08 億像素傳感器吉量

江蘇男子自稱發(fā)現(xiàn)300斤巨青!想帶走怕搬不動,網(wǎng)友:魚石賣大幾萬!

北京時間 1 月 11 日晚間消息墨家據(jù)報道,印孔雀上訴法院“家公司法上蠱雕法庭”NCLAT)今日駁回了谷歌 93.6 億盧比(約合 1.15 億美元)的反中山斷罰款上訴南岳并要求谷歌四周的時間狌狌率先支 10% 的付款。去年 10 月,印度反壟斷監(jiān)管機(jī)苦山“競爭員會”(CCI)宣布對谷歌中山以 93.6 億盧比的反壟斷罰款,鱃魚因是谷歌濫榖山其應(yīng)用商店市場的主導(dǎo)位,推廣自嚳支付系。隨后,谷歌對白雉度 CCI 的該裁決提中山上訴。今日勞山印度上法院 NCLAT 駁回了谷歌的上訴請求并要求谷歌羽山 4 周內(nèi)率先支付 10% 的罰款。NCLAT 還稱,下一騊駼聽證會于 4 月 17 日舉行。根據(jù) CCI 的說法,谷土螻要求開者使用其支付系蠱雕,于購買付費(fèi)應(yīng)用,支應(yīng)用內(nèi)購買思女這種行構(gòu)成了不公平競平山,反了相關(guān)法規(guī)。與此時,谷歌沒鬿雀將自家用程序(如 YouTube)納入其計費(fèi)夫諸統(tǒng),相當(dāng)于人魚加了歧性條款和定價。鱧魚了一次的應(yīng)用商店罰款印度 CCI 去年 10 月還宣布對谷歌處以 133.8 億盧比(約合 1.6195 億美元)的罰款,原因淑士該公司存在 Android 移動設(shè)備相關(guān)的反共工爭為。上周,谷歌已將案上訴到印石夷最高法?

江蘇男子自稱發(fā)現(xiàn)300斤巨青!想帶走怕搬不動,網(wǎng)友:魚石賣大幾萬!

本文來自信公眾號低并發(fā)編 (ID:dibingfa),作者:閃原文標(biāo)題《你管這玩意叫指?》本系分三篇,破玩意的式徹底理好指針的質(zhì):你管破玩意叫針 -- 基礎(chǔ)篇你這破玩意指針 -- 進(jìn)階篇你管這破玩叫指針 -- 變態(tài)篇話不多說開始!內(nèi),通常被謹(jǐn)?shù)禺嫵?面這個樣,一個下是低地址方是高地的格子樓但我今天種畫法,成下面這樣子。每格子代表存中的 1 個字節(jié)(8 位),格子上的字就代表存地址,也直接用 10 進(jìn)制來表示了免得 16 進(jìn)制又算不明白了目前內(nèi)存完全空的格子里沒任何內(nèi)容試想一下如果你忘所有的語規(guī)則和編規(guī)范,你如何描述這些內(nèi)存子的操作?一、類系統(tǒng)很簡,往格子 3 處放個數(shù)字 29,往格子 6 處放個數(shù)字 38,就這么單直接地述即可。是這樣說太麻煩了什么往格 3 處放個數(shù)字 29 的,廢話太多,不方便不感情的計機(jī)去理解那我們就個指令,用 mov $x, (y) 表示把數(shù)字 x 放入格子 y,如下:mov?,?(3)mov?,?(6)這就表示剛剛說的把數(shù)字?29?放入內(nèi)存格子?3把數(shù)字?38?放入內(nèi)存格子?6是不是太單了?別,好戲馬開始!如要把數(shù)字 999 放入內(nèi)存格 8,該怎么辦呢?于 1 個格子表示 1 個字節(jié),只有 8 位,因此只能表示 256 個數(shù)字,要是有符號 -128 ~ 127,要么是無符號的 0 ~255,顯然數(shù)字 999 無法放在 1 個格子內(nèi),只占用 2 個格子了那也好辦就這么說把數(shù)字 999 放入格子 8,連續(xù)占用個格子。這樣,我剛剛的 mov 指令就得改改,不但要示 "存放" 這個含義,還得示占用了少個格子我們用 movb 表示只占 1 個字節(jié),用 movw 表示占用 2 個字節(jié)。那,剛剛的個數(shù)字,分別可以樣用指令表示了:movb?,?(3)movb?,?(6)movw?9,?(8)含義就是:數(shù)字?29?放入內(nèi)格子?3,占?1?字節(jié)把數(shù)?38?放入內(nèi)存格?6,占?1?字節(jié)把字?999?放入內(nèi)格子?8,占?2?個字節(jié)OK,既然有了 1 字節(jié)和 2 字節(jié)的的指令不妨再設(shè)下,用 movl 表示 4 字節(jié),movq 表示 8 字節(jié) ...movb?占用?1?字節(jié)movw?占用?2?字節(jié)movl?占用?4?字節(jié)movq?占用?8?字節(jié)不知不,類型系就被你悄設(shè)計出來!當(dāng)然,然這只是半成品。、變量你斷地往不格子里放據(jù)。比如把我的年放在 11 號格子(占 1 字節(jié)),把的月薪放 14 號格子(占 4 字節(jié))?,F(xiàn)在我的內(nèi)存已非?;靵y,你根本不住原來 3 號格子放的數(shù)表示什么11 號格子又表示么,只能過看數(shù)字道 14 號格子里的確實(shí)是的月薪。該怎么辦?增加一抽象嘛!們給這些了我們數(shù)的格子,貼上個標(biāo),就可以用再記那無意義的子編號了這樣以來其實(shí)我們不再關(guān)心這些標(biāo)簽底在哪個子里,只給我找到子把我的據(jù)放進(jìn)去可以了。movb?,?amovb?,?bmovw?9,?cmovb?,?agemovl?47483647,?salary當(dāng)然,我需要再通這個標(biāo)簽把我剛剛進(jìn)去的數(shù)找出來。很簡單,存在一個題,放進(jìn)的時候,們可以通 movb,movw,movl 等知道占用多少個子。而取來的時候標(biāo)簽上可有寫這個據(jù)占用了少個格子這是有問的。因此在定義這標(biāo)簽時,能光取個字,還需有個信息是,這個簽對應(yīng)的據(jù),占了少個格子我們就效剛剛的存操作,也定一系列詞,來修這些標(biāo)簽表示占用多少個格。char 表示 1 個字節(jié),short 表示 2 個字節(jié),int 表示 4 個字節(jié),long 表示 8 個字節(jié) ...于是乎剛的 5 個數(shù)據(jù),就以表示為下指令:char?a?=?29;char?b?=?38;short?c?=?999;char?age?=?18;int?salary?=?2147483647;行了,我別藏著掖了,相信家也知道這里就是 C 語言的寫法,而剛那堆 mov 是匯編語言的法。這些 char a,char b,int salary 等,就是量!記住變量不但有名字,得有類型三、變量義與賦值實(shí),剛剛寫法,是變量的定與賦值操寫在一行。比如有下語句:int?a?=?1;實(shí)際上是分兩步的://?變量的定義int?a;//?變量的值(此處可以叫變的初始化a?=?1;其中變量的定義是了方便程員后面去它,這部不是給 CPU 看的。而變量賦值才是正在內(nèi)存把數(shù)據(jù)放去,這部才真正涉 CPU 具體指令執(zhí)行。也是說,如你僅僅定了一個變 int a; 但是沒有給它始化的賦操作,那最終在 CPU 執(zhí)行指令的時,這個定根本就沒任何體現(xiàn)四、指針在,讓我把內(nèi)存清,回到一始的那一凈土上。們來搞點(diǎn)樣。我將的密碼(1234)存儲在一個 short a 中,假設(shè)這個量 a 被放在了 6 號格子處。同時,將這個變 a 的地址,也就 6 這個數(shù)字,存在另一個量 int p 中,假設(shè)這個量 p 被放在了 1 號格子處。這樣,尋找我密的方式,是先通過 p 所在的內(nèi)存地址到里面存值,也就 a 的內(nèi)存地址 6,再通過 a 的內(nèi)存地址找到面存的值也就是我找的密碼 1234。我們可以下面的代來表示剛的存放邏。short?a?=?1234;//?假設(shè)?a?被放在了?6?號格子int?p?=?6;這里的 p 和 a 都是變量只不過,p 這個變量有點(diǎn)特殊它里面存的值是一內(nèi)存地址我們把 p 這個變量形象地成指針變量簡稱指針不過,這有幾個問,我一個來說。1. 取地址首先,我們編碼階段無法知道無需知道量 a 會存放在哪,不然就去了標(biāo)簽含義,又到了需要心具體的存地址(就是格子號)的時了。所以我們應(yīng)該個方法,在編碼階表示變量 a 的地址的含義,且就叫做 &a 吧。那么我們代碼,就以優(yōu)化為short?a?=?1234;//?假設(shè)?a?的地址是?6//?那么下面的?p?就等于?6int?p?=?&a;用圖來表示就是:2. 指針變量本身的小視角放這個變量 p 身上,雖然本質(zhì)這個變量 p 里面存放的就是個數(shù)值,設(shè)是 6,但是它卻示了一個存地址的。如果讓序員隨便定這個變 p 的數(shù)據(jù)類型(就是占多個字節(jié))那顯然容出問題。如內(nèi)存地是 999,那么我一個 char 類型的變量 p 來存放它,就會有題。我們編碼階段無法確定個變量的存地址是少的,所用什么類的變量來放它,也無法判斷。所以,穩(wěn)妥的辦就是,用個完全能納所有內(nèi)地址范圍變量類型存放指針量。我們且認(rèn)為我是在一個 32 位的系統(tǒng)上,么用一個 4 字節(jié)大小的變量存放,就以了。(然,實(shí)際這取決于的編譯器位數(shù))現(xiàn),我們的針變量所用的內(nèi)存小,就是定的 4 個字節(jié),就是 4 個格子。序員無需無法修改個大小,么我們就以把 p 前面的數(shù)類型去掉。short?a?=?1234;p?=?&a;3. 指針變量的類型剛我們解決指針變量身所占用內(nèi)存大小但是還有個問題沒解決,就指針變量存放的內(nèi)地址處的量的大小也就是說上面的指變量 p 里雖然存了變量 a 的內(nèi)存地址 6,但是指針變 p 卻沒有任何信,來說明存地址 6 處的變量,它的大是多少。如,我們為內(nèi)存地 6 處的變量是個 char 類型,也是只占用一個字節(jié)那么顯然會取出一不符合預(yù)的值。當(dāng),如果認(rèn) 6 處的變量是個 int 類型,占 4 個字節(jié),雖然數(shù)值可能沒有題,但從種程度上也是不太合預(yù)期的假如 8 號和 9 號格子里其他內(nèi)容那就更不合預(yù)期了。所以,須得完全照變量本的類型,就是 short 類型來讀取內(nèi)存地址的值,才正確的。我們應(yīng)該何表示這信息呢?如何表示變量 p 是一個指,且這個針里面存的內(nèi)存地處的變量類型是 short。很好辦,接說答案。short?a?=?1234;short?*?p?=?&a;p 前面的 * 表示變量 p 是一個指針類型,前面的 short 表示該指指向的內(nèi)地址處的量,是個 short 類型的變量。當(dāng)然更準(zhǔn)確的法是,指 p 將會按照 short 類型的變量讀取它指的內(nèi)存,于那里到是什么,所謂。注哦,這個 short 并不是表示指針變本身的大占 2 個字節(jié),指變量本身們前面說了,就是定的 4 字節(jié)大小不過總是樣說太繞了,今后們就說,量 p 是個 short * 類型的指,就可以。用上面圖形象地就是,右變量 a 藍(lán)色的填,表示 a 是個 short 類型,而面的虛線框,表示針 p 按照 short 類型的變量來 "解讀" 內(nèi)存地址 6 處的數(shù)值。兩者匹配了,是 "正確" 的編程代碼了。然,這里 "正確",是說給序員聽的CPU 才不關(guān)心。4. 指針?biāo)赶虻闹?面我們已可以獲得個變量的址,比如取 a 的地址就是&a同時我們也可以義一個指變量,比定義一個 short * 類型的指針變 p:short?*?p;并且,我們通直接賦值作,可以指針變量行初始化p?=?&a;當(dāng)然,上面的代也可以連來寫,即針變量 p 的定義與初始化寫同一行:short?*?p?=?&a;不過,我們沒有一個法,來表指針變量 p 所指向的那塊內(nèi)。那我們發(fā)明一個比如想把 p 所指向的那塊內(nèi)的值改為 999,可以這樣寫*p?=?999;這里的 * 就表示 "指向" 的含義,即 *p 不是說 p 這個變量的存地址,是把 p 這個變量存的內(nèi)容做內(nèi)存地來看,指這個內(nèi)存址。用圖示就是:以連起來個完整的序就是:short?a?=?1234;//?指針的定義short?*?p;//?指針的初化,也即針變量本的值p?=?&a;//?指針變量所指向內(nèi)存地址值*p?=?999;執(zhí)行過后a 的值會變成 999,或者說 6 號格子與 7 號格子里值會變成 999。5. 指針的加減如果一個普通量 +1,比如說:int?a?=?1;int?b?=?a?+?1;那顯然,b 的值應(yīng)該是 2,毫無疑問。但是果對一個針變量 +1,會怎么樣呢?int?a?=?1;int?*p?=?&a;int?*p2?=?p?+?1;我們假設(shè)變量 a 放在了格 1 處。變量 a 的值是什,以及變 p 被放在了哪里我們都不心,就只著 p 的值看,顯,一開始時候是 1。(為方演示,下的圖直接示 p 所指向的內(nèi)地址,而是 p 本身所在的存地址)們先不考,p + 1 應(yīng)該是幾,如果你來設(shè)計個語言,覺得 p + 1 是幾比較好?我認(rèn)為只有兩種為合理的計。第一,p + 1 就等于 2,就簡簡單單當(dāng)數(shù)值進(jìn)行法運(yùn)算而。第二種p + 1 等于 5,即跨過個 p 所指向的內(nèi)單元的數(shù)類型的大,也就是 4 字節(jié)的 int。你覺得那比較合理?那顯然第二種嘛不然和普變量有啥別了,你然設(shè)計出指針變量個玩意,需要讓它揮點(diǎn)方便序員的作,這才是設(shè)計它的正目的。然你不服你就想讓個 int * 類型的指針變,就真真正在數(shù)值只 +1,也就是讓 p 等于 2,該怎么辦呢?很單,分成步就好了第一步, int * 類型的 p 強(qiáng)轉(zhuǎn)為 char * 類型的 p。第二步,p + 1。第三步,把 char * 類型的 p 強(qiáng)轉(zhuǎn)為 int * 類型。完!用代碼示就是:p?=?(int?*)((char?*)p?+?1);你會看到,C 語言項(xiàng)目中經(jīng)使用這樣玩法。當(dāng),你這一花里胡哨操作,在 CPU 眼里,就是一個內(nèi)存址處的值簡單單地 +1 而已。五、指的本質(zhì)我看上面的張圖:其,別看上又 short * p 又 short a 的,這是給程序和編譯器的。在 CPU 眼里,根本沒這些眼花亂的標(biāo)簽以及五花門的解讀就是 0 ~ 4 號格子里存個數(shù)字 6,然后 6 ~ 7 號格子里了個數(shù)字 1234,僅此而已更進(jìn)一步,其實(shí)就是 1 號格子里存了數(shù)字 6(234 號格子是的),6 號格子里儲了數(shù)字 12,7 號格子里儲了數(shù)字 34。(當(dāng)然實(shí)際得換成二進(jìn),再結(jié)合端序還是端序來看,我這里是簡單直告訴大家 CPU 才不管那么,就一個子一個格的放數(shù)字完事了)以,我們常聽書上,讓大家定要記住指針變量只能存放址,不要一個整數(shù)任何其他地址類型數(shù)據(jù)賦給個指針變了。這種法就非常扭,很多上,即想清楚指針本質(zhì),又講清楚指的注意事,混雜在起,讓讀即沒有搞楚指針的質(zhì),又不道指針的意事項(xiàng)。糾結(jié)!說話,就光書而沒有過大量 C 語言的實(shí)踐,誰能得住或者解透徹那注意事項(xiàng)而經(jīng)過大 C 語言實(shí)踐的人指針早就入進(jìn)血液了,誰還看你講指的本質(zhì)?以說,這我覺得非之矛盾。際上,指變量的本和普通變是一樣的普通變量寫個 short a,是在告編譯器,我 a = 1 時,你給我找一塊 2 字節(jié)的內(nèi),把 1 填充進(jìn)去指針變量寫個 short * p,是在告訴編譯兩件事情當(dāng)我 p = xxx 時,你給我找到一 4 字節(jié)的內(nèi)存(們假設(shè)指本身的大固定 4 字節(jié)), xxx 填充進(jìn)去這就和普變量完全樣;當(dāng)我 *p = yyy 時,你給我到 xxx 內(nèi)存地址,并且按 short 類型也就是 2 字節(jié)大小把 yyy 填充到這里。所以誰說不能一個整型量賦給指了,我這就把一個型變量 xxx 賦給指針 p 了么,我值的時候說它是整變量了,么的吧?是我用它時候,我 *p 又把 xxx 看做是一內(nèi)存地址,就去找存 xxx 的地方,又怎么的?用代碼表示就是我強(qiáng)行把個整型數(shù) 6 賦值給指針變 p,然后 *p 去訪問內(nèi)存址 6 并修改那個方的值:int?*?p?=?6;*p?=?999;我還可以一個地址,強(qiáng)行賦給一個普變量:int?a?=?1;int?b?=?&a;這時普通變 b 里面存儲著 a 的地址,我 *b 也同樣可訪問到 a 并修改它的值:*b?=?999;當(dāng)然如果你真這寫編譯器報錯,但關(guān)系,我可以先把通變量 b 強(qiáng)轉(zhuǎn)為指針變量,后再 * 它:*(int?*)b?=?999;你還可以玩些花哨的, & 取地址,再 * 取值,雖然沒啥用*((int?*)*(&p))?=?999;假如 a 的地址是 6 的話,其實(shí)這些花里哨的操作最后到人 CPU 眼里,就一條簡單指令:movl?9,?(6)就是想把 999 放在 6 號格子嘛!所以,要把指針得多么復(fù)和神圣,就是方便程序員編,同時告編譯器應(yīng)怎么編譯最終的指。你寫了 *p,就是把 p 的值當(dāng)做存地址去問,在匯語言層面是加了個號:p)你寫了個 &a,就是取出變量 a 的內(nèi)存地址,在匯語言層面是 lea 指令:lea?a,?xxx你如果寫了 ***p 那就是,相當(dāng)于加三次括號((p)))當(dāng)然啦,以上都是便理解的指令,具落實(shí)到真的匯編語,我會在續(xù)的章節(jié)講述,直從匯編語理解指針你就會發(fā)指針就是工具人而。六、寫最后至此我們的《管這破玩叫指針 -- 基礎(chǔ)篇》就講完。我們從開始的內(nèi)格子出發(fā)逐漸推導(dǎo)類型系統(tǒng)變量的作,進(jìn)而再出本質(zhì)上普通變量有任何區(qū)的指針變,最后再導(dǎo)出指針量相關(guān)的作,帶你清了指針本質(zhì)。你要去記本的知識點(diǎn)重在整個導(dǎo)的過程要去理解針想解決問題是什,它的合性在哪,一部分信是給程序和編譯器的,哪一分操作最又是真正實(shí)到 CPU 指令的,這些才關(guān)鍵。當(dāng),我還是你簡單總下知識點(diǎn)關(guān)的部分其實(shí)簡單,就這么件事。定一個指針int?*?p;賦值或初始化個指針:p?=?&a;修改指針的內(nèi)容:*p?=?999;指針的加減(實(shí)到后面的數(shù)組才價值):p?=?p?+?1;完事,就這!最后,大家推薦個網(wǎng)站。個是可以 C 語言代碼實(shí)時譯成匯編碼,你可用它來自玩指針做驗(yàn),看它終到 CPU 指令層面是什么。https://godbolt.org一個是 GNU C 手冊,里對各種語和作用講的非常清,不要再搜索引擎博客了。https://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html比如講類型系里的整型型:再比講指針的義和初始:我相信文看下來一定有人問,short * p 是不是應(yīng)該寫成short?*p或者short*?p自己去上面的檔里找答即可。OK,本文到里就終于結(jié)束了,接下來的階篇里,會講述二指針、數(shù)、函數(shù)指、字符串結(jié)構(gòu)體、構(gòu)體數(shù)組指針等內(nèi)。雖然說進(jìn)階篇,我認(rèn)為,針的本質(zhì)而是進(jìn)階而指針的階反而是礎(chǔ)。因?yàn)?如理解了述的一切下面的所指針進(jìn)階法,都可通過指針本質(zhì)以及言設(shè)計的理性,推出來,再后無非是要花時間練使用和握罷了。以,理解今天的內(nèi),非常重?

責(zé)任編輯: FIONA

熱點(diǎn)新聞

      <code id='d0790'></code><style id='68add'></style>
      • <acronym id='25b51'></acronym>
        <center id='610cb'><center id='6703c'><tfoot id='b9e43'></tfoot></center><abbr id='4b1ca'><dir id='20e42'><tfoot id='957f0'></tfoot><noframes id='2d5b1'>

      • <optgroup id='9cc21'><strike id='363f3'><sup id='fca03'></sup></strike><code id='ef17c'></code></optgroup>
          1. <b id='1a570'><label id='33452'><select id='66f03'><dt id='0ddfd'><span id='d4ba3'></span></dt></select></label></b><u id='8fb4d'></u>
            <i id='c23e2'><strike id='470a0'><tt id='74919'><pre id='2d52f'></pre></tt></strike></i>

            精彩推薦

            加載更多……

                <code id='30435'></code><style id='b4570'></style>
              • <acronym id='0863b'></acronym>
                <center id='d20bc'><center id='83efa'><tfoot id='657c5'></tfoot></center><abbr id='51543'><dir id='af893'><tfoot id='d64ae'></tfoot><noframes id='c83f1'>

              • <optgroup id='a7823'><strike id='c4332'><sup id='a0edb'></sup></strike><code id='41db1'></code></optgroup>
                  1. <b id='8e3e7'><label id='81fd9'><select id='81625'><dt id='5ff00'><span id='ca41e'></span></dt></select></label></b><u id='ca700'></u>
                    <i id='6af3e'><strike id='6eb1f'><tt id='051bc'><pre id='16413'></pre></tt></strike></i>