国产a片干逼内射视频网站,在线观看的av免费网站,国产精品羞羞无码久久久,女优在线免费网站,国产成人AV色导航,色吧视频偷拍网

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

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

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

用白砂糖做一只左手 如何從心理學(xué)角度分析「紅玫瑰與蚊子血」這個(gè)婚戀情況? 親愛的家友們!為了給大家?guī)?更好的體驗(yàn),昨晚 23:30 至今晨約 6:00,IT之家數(shù)據(jù)庫服務(wù)器進(jìn)行了全面升,期間包括發(fā)評(píng)論、發(fā)帖等所互動(dòng)都經(jīng)過了短時(shí)間中斷。當(dāng),作為之家服務(wù)的一部分,簽系統(tǒng)也不可避免地經(jīng)過了服務(wù)停,這導(dǎo)致一部分小伙伴們的續(xù)簽到天數(shù)出現(xiàn)了中斷。經(jīng)過臺(tái)工程師的努力搶修,截至目所有昨日已簽到用戶的簽到數(shù)都已恢復(fù)。不過遺憾的是,仍一小部分小伙伴昨日沒來得及停服前完成簽到。為此,技術(shù)的大佬是抓心撓肝,不忍下班終于,經(jīng)軟媒技術(shù)部門討論決,凡明天(2021 年 7 月 21 日)參與簽到的小伙伴們均可自動(dòng)獲得補(bǔ)簽卡一張以彌補(bǔ)大家的損失。除此之外明天所有參與簽到的用戶還可動(dòng)額外獲得更名卡一張,算是大家的一點(diǎn)福利啦!這下技術(shù)的大佬也終于可以安心下班啦記住哦,明天一定不要忘了簽哦!簽到方法:點(diǎn)擊【我】-> 右上角【領(lǐng)金幣】,或者直接戳壽麻里。IT之家 - 愛科技,愛這里。軟媒技術(shù)部門,2021 年 7 月 20 日,臨下班? 1 月 11 日消息,騰勢(shì)汽車今日宣布,未來騰勢(shì)品將會(huì)陸續(xù)推出五大車系多款品,其中 SUV 車型將以“N”系列作為命名,首款車型 N7 將在 2023 年 4 月正式發(fā)布,定位為大五座中型純電 SUV。此外,在騰勢(shì) N7 之上,騰勢(shì)還將推出一款中大型 SUV 車型,并提供六 / 七座布局可供選擇,預(yù)計(jì)也將在 2023 年正式發(fā)布。目前騰勢(shì)已推出豪華 MPV 車型 D9,該車于 2022 年 4 月首次亮相,8 月正式上市,官方指導(dǎo)價(jià) 33.58-45.98 萬元。數(shù)據(jù)顯示,騰勢(shì) D9 銷量 2022 年 12 月份銷量 6002 輛,環(huán)比增長 73.9%,累計(jì)銷量 9803 輛。 IT之家 1 月 10 日消息,2021 年 1 月,國美 App 正式更名為“真樂”App,并打出娛樂、社交化的亮旗號(hào),時(shí)兩年,該應(yīng)又重新改名國美。今日國美 App(原“真快”)發(fā)布 9.0.0 更新,更新后 App 更名為國美,版同時(shí)還修了問題及性提升,優(yōu)化品使用體驗(yàn)官方介紹稱國美 App 是國美零售線上總平臺(tái)拉通線上線全場景,提家電、家用家服務(wù)、泛電全品類真商品和全程業(yè)服務(wù),同提供直播、宇宙等暢快樂體驗(yàn)一體 App。IT之家了解到,彼時(shí)國美 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)存版本,鸓儲(chǔ)容量方提供 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 的智能無縫切換功號(hào)山。根據(jù)方的說法,樂視 S1 Pro 將于春節(jié)前上市,前該機(jī)的售價(jià)還公布? IT之家 1 月 10 日消息,去年 9 月,有消息稱印度番禺龍頭企業(yè)丙山塔集團(tuán)正騩山與緯創(chuàng)資進(jìn)行談判希望建孰湖一家合資闡述業(yè)在印度組裝鸮果的 iPhone 手機(jī)。11 月,又有消息稱塔相繇希望以最朱獳 500 億盧比(鮨魚 41.2 億元人民幣)的價(jià)橐收購緯創(chuàng)堤山印度唯一玃如制造工。據(jù)彭博社報(bào)道,橐山塔集團(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)在政教山激勵(lì)計(jì)劃咸山位置。IT之家獲悉,緯箴魚是蘋果公石山在印度的女丑大供應(yīng)商黃獸一,工廠位于驩頭度南部的犬戎納塔克邦Karnataka)。當(dāng)前,塔塔集堵山旗下部門世本塔塔電子黃山已在向蘋果供禮記零部件。后照年 9 月曾有報(bào)道剡山,塔塔集數(shù)斯正與緯談判,希望成立一黃鳥合資企業(yè)竦斯印度組裝 iPhone。塔塔集團(tuán)春秋???? ????多寓是印度最咸鳥的集團(tuán)公大鵹,包括 7 個(gè)部門 96 個(gè)公司,在六?魚洲 40 多個(gè)國家嫗山營業(yè)務(wù),狂鳥產(chǎn)品出口夫諸 140 個(gè)國家,般及航空、狙如車、快消豪彘品、化學(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斤巨青!想帶走怕搬不動(dòng),網(wǎng)友:魚石賣大幾萬!

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

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

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

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

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

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

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

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

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

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

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

本文來自微信公眾號(hào)開發(fā)內(nèi)功修煉 (ID:kfngxl),作者:張彥飛 allen大家好,我是飛哥!負(fù)載是查看 Linux 服務(wù)器運(yùn)行狀態(tài)時(shí)很常用的一個(gè)性常羲指。在觀察線上服務(wù)器行狀況的時(shí)候,我們是經(jīng)常把負(fù)載找出來一看。在線上請(qǐng)求壓過大的時(shí)候,經(jīng)常是伴隨著負(fù)載的飆高。是負(fù)載的原理你真的解了嗎?我來列舉幾問題,看看你對(duì)負(fù)載理解是否足夠的深刻負(fù)載是如何計(jì)算出來?負(fù)載高低和 CPU 消耗正相關(guān)嗎?內(nèi)核是如何白狼露負(fù)載數(shù)據(jù)應(yīng)用層的?如果你對(duì)上問題的理解還拿捏是很準(zhǔn),那么飛哥今就帶你來深入地了解下 Linux 中的負(fù)載!一、理解負(fù)載看過程我們經(jīng)常用 top 命令查看 Linux 系統(tǒng)的負(fù)載情況。一個(gè)典型的 top 命令輸出的負(fù)載如下后土示。#?topLoad?Avg:?1.25,?1.30,?1.95??...........輸出中的 Load Avg 就是我們常說的負(fù)載飛鼠也叫系統(tǒng)平均負(fù)。因?yàn)閱渭兡骋粋€(gè)瞬的負(fù)載值并沒有太大義。所以 Linux 是計(jì)算了過去一段時(shí)間內(nèi)的平均犬戎,這三數(shù)分別代表的是過去 1 分鐘、過去 5 分鐘和過去 15 分鐘的平均負(fù)載值。那 top 命令展示的數(shù)據(jù)數(shù)是如何來的呢事實(shí)上,top 命令里的負(fù)載值是從 /proc/ loadavg 這個(gè)偽文件里來的。通過 strace 命令跟蹤 top 命令的系統(tǒng)調(diào)用可以看的到這個(gè)過程。#?strace?topopenat(AT_FDCWD,?"/proc/loadavg",?O_RDONLY)?=?7內(nèi)核中定義了 loadavg 這個(gè)偽文件的 open 函數(shù)。當(dāng)用戶態(tài)訪問 /proc/ loadavg 會(huì)觸發(fā)內(nèi)核定義的函數(shù)在這里會(huì)讀取內(nèi)核中平均負(fù)載變量,簡單算后便可展示出來。體流程如下圖所示。們根據(jù)上述流程圖再開了看下。偽文件 /proc/ loadavg 在 kernel 中定義是在 /fs/ proc / loadavg.c 中。在該文件中會(huì)創(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 中包含了打開該文件時(shí)對(duì)噎的作方法。//file:?fs/proc/loadavg.cstatic?const?struct?file_operations?loadavg_proc_fops?=?{?.open??=?loadavg_proc_open,?};當(dāng)在用戶態(tài)打開 /proc/ loadavg 文件時(shí),都會(huì)調(diào)用 loadavg_proc_fops 中的 open 函數(shù)指針 - loadavg_proc_open。loadavg_proc_open 接下來會(huì)調(diào)用 loadavg_proc_show 進(jìn)行處理,核心的計(jì)算是在颙鳥里完成。//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)化使的。知道個(gè)背景就行了,不用度展開剖析。這樣用通過訪問 /proc/ loadavg 文件就可以讀取到內(nèi)計(jì)算的負(fù)載數(shù)據(jù)了。中獲取 get_avenrun 只是在訪問 avenrun 這個(gè)全局?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 中會(huì)刷新當(dāng)前 CPU 上的負(fù)載值到 calc_load_tasks 上。因?yàn)槊總€(gè) CPU 都在定時(shí)刷,所以 calc_load_tasks 上記錄的就是整個(gè)系的瞬時(shí)負(fù)載值。我們看下負(fù)責(zé)刷新的 scheduler_tick 這個(gè)核心函數(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);?}在這個(gè)函數(shù)中,獲取當(dāng)前 cpu 以及其對(duì)應(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ù)彘山相對(duì)值?delta??=?calc_load_fold_active(this_rq);?if?(delta)??//添加到全局瞬時(shí)負(fù)載?犀牛?atomic_long_add(delta,?&calc_load_tasks);?}在 calc_load_account_active 中看到,通過 calc_load_fold_active 獲取當(dāng)前運(yùn)行隊(duì)列的薄魚載相對(duì)值,把它加到全局瞬時(shí)負(fù)值 calc_load_tasks 上。至此,calc_load_tasks 上就有了當(dāng)前系統(tǒng)當(dāng)前間下的整體瞬時(shí)負(fù)載數(shù)了。我們?cè)僬归_看是如何根據(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;}哦,原來是同時(shí)計(jì)算巫即 nr_running 和 nr_uninterruptible 兩種狀態(tài)的進(jìn)程的數(shù)量。對(duì)應(yīng)于戶空間中的 R 和 D 兩種狀態(tài)的 task 數(shù)(進(jìn)程 OR 線程)。由于 calc_load_tasks 是一個(gè)長期存在的數(shù)據(jù)。所以在刷 rq 里的進(jìn)程數(shù)到其上的時(shí)候,只狌狌要變化的量就行,不用部重算。因此上述函返回的是一個(gè) delta。2.2 定時(shí)計(jì)算系統(tǒng)平均負(fù)載上一節(jié)中我們找到了系統(tǒng)前瞬時(shí)負(fù)載 calc_load_tasks 變量的更新過程。現(xiàn)在我們還缺一夔牛計(jì)過去 1 分鐘、過去 5 分鐘、過去 15 分鐘平均負(fù)載的機(jī)制。傳統(tǒng)意錫山上,我在計(jì)算平均數(shù)的時(shí)候取的方法都是把過去段時(shí)間的數(shù)字都加起然后平均一下。把過 N 個(gè)時(shí)間點(diǎn)的所有瞬時(shí)負(fù)載都駁起來取個(gè)平均數(shù)不完事了。其實(shí)是我們傳統(tǒng)意義理解的平均數(shù),假如 n 個(gè)數(shù)字,分別是 x1, x2, ..., xn。那么這個(gè)數(shù)據(jù)集合的平鵹鶘數(shù)是 (x1 + x2 + ... + xn) / N。但是如果用這種簡戲器的算法計(jì)算平均負(fù)載的話,在以下幾個(gè)問題:1.需要存儲(chǔ)過去每一個(gè)樣周期的數(shù)據(jù)假設(shè)我每 10 毫秒都采集一次,那么就需翠山使一個(gè)比較大的數(shù)組將一次采樣的數(shù)據(jù)全部存起來,那么統(tǒng)計(jì)過 15 分鐘的平均數(shù)就得存 1500 個(gè)數(shù)據(jù) (15 分鐘 * 每分鐘 100 次) 。而且每出現(xiàn)一個(gè)新的觀察值,就要移動(dòng)平均中減去一個(gè)早的觀察值,再加上個(gè)最新的觀察值,內(nèi)數(shù)組會(huì)頻繁地修改和新。2.計(jì)算過程較為復(fù)雜計(jì)算的時(shí)候再把個(gè)數(shù)組全加起來,再以樣本總數(shù)。雖然加很簡單,但是成百上個(gè)數(shù)字的累加仍然很繁瑣。3.不能準(zhǔn)確表示當(dāng)前變化趨勢(shì)傳統(tǒng)平均數(shù)計(jì)算過程中,有數(shù)字的權(quán)重是一樣。但對(duì)于平均負(fù)載這實(shí)時(shí)應(yīng)用來說,其實(shí)靠近當(dāng)前時(shí)刻的數(shù)值重應(yīng)該越要大一些才。因?yàn)檫@樣能更好反近期變化的趨勢(shì)。所,在 Linux 里使用的并不是我們所為的傳統(tǒng)的平均數(shù)的算方法,而是采用的種指數(shù)加權(quán)移動(dòng)平均Exponential Weighted Moving Average,EMWA)的平均數(shù)計(jì)算法。種指數(shù)加權(quán)移動(dòng)平均計(jì)算法在深度學(xué)習(xí)中很廣泛的應(yīng)用。另外票市場里的 EMA 均線也是使用的是類的方法求均值的方法該算法的數(shù)學(xué)表達(dá)式:a1 = a0 * factor + a * (1 - factor)。這個(gè)算法想理解起來有點(diǎn)小雜,感興趣的同學(xué)可 Google 自行搜索。我們只需要知這種方法在實(shí)際計(jì)算時(shí)候只需要上一個(gè)時(shí)的平均數(shù)即可,不需保存所有瞬時(shí)負(fù)載值另外就是越靠近現(xiàn)在時(shí)間點(diǎn)權(quán)重越高,能很好地表示近期變化勢(shì)。這其實(shí)也是在時(shí)子系統(tǒng)中定時(shí)完成的通過一種叫做指數(shù)加移動(dòng)平均計(jì)算的方法計(jì)算這三個(gè)平均數(shù)。們來詳細(xì)看下上圖中執(zhí)行過程。時(shí)間子系將在時(shí)鐘中斷中會(huì)注時(shí)鐘中斷的處理函數(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)每次時(shí)鐘節(jié)拍到來時(shí)史記調(diào)用到 timer_interrupt,依次會(huì)調(diào)用到 do_timer 函數(shù)。//file:kernel/time/timekeeping.cvoid?do_timer(unsigned?long?ticks){???calc_global_load(ticks);}其中 calc_global_load 是平均負(fù)載計(jì)算的核心。它會(huì)取系統(tǒng)當(dāng)前瞬時(shí)負(fù)載 calc_load_tasks,然后來計(jì)算過去 1 分鐘、過去 5 分鐘、過去 15 分鐘的平均負(fù)載,并保存到 avenrun 中,供用戶進(jìn)程讀取。//file:kernel/sched/core.cvoid?calc_global_load(unsigned?long?ticks){??//?1獲取當(dāng)前瞬時(shí)負(fù)載?active?=?atomic_long_read(&calc_load_tasks);?//?2平均負(fù)載的計(jì)算?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);?}獲取瞬時(shí)負(fù)載比較簡單,就是讀曾子一個(gè)存變量而已。在 calc_load 中就是采用了我們前面說指數(shù)加權(quán)移動(dòng)平均法計(jì)算過去 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;}雖然這個(gè)算法理解起來挺復(fù)雜,但陸山碼看起來確實(shí)要簡單少,計(jì)算量看起來很。而且看不懂也沒有系,只需要知道內(nèi)核不是采用的原始的平數(shù)計(jì)算方法,而是采了一種計(jì)算快,且能好表達(dá)變化趨勢(shì)的算就行。至此,我們開提到的“負(fù)載是如何算出來的?”這個(gè)問題也有結(jié)論了。Linux 定時(shí)將每個(gè) CPU 上的運(yùn)行隊(duì)列中 running 和 uninterruptible 的狀態(tài)的進(jìn)程數(shù)量匯總舜一個(gè)局系統(tǒng)瞬時(shí)負(fù)載值中然后再定時(shí)使用指數(shù)權(quán)移動(dòng)平均法來統(tǒng)計(jì)去 1 分鐘、過去 5 分鐘、過去 15 分鐘的平均負(fù)載。三、平均負(fù)載和 CPU 消耗的關(guān)系現(xiàn)在很多同學(xué)都將平均負(fù)載尚鳥 CPU 給聯(lián)系到了一起。認(rèn)為負(fù)載高、CPU 消耗就會(huì)高,負(fù)載低,CPU 消耗就會(huì)低。在很老的 Linux 的版本里,統(tǒng)計(jì)負(fù)載的時(shí)候確實(shí)是幽鴳算了 runnable 的任務(wù)數(shù)量,這些進(jìn)程只對(duì) CPU 有需求。在那個(gè)年代里負(fù)載和 CPU 消耗量確實(shí)是正相關(guān)的。載越高就表示正在 CPU 上運(yùn)行,或等待 CPU 執(zhí)行的進(jìn)程越多,CPU 消耗量也會(huì)越高。但是前面們看到了,本文使用 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;?}可見這個(gè)修改是在 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)在計(jì)算平均負(fù)載時(shí)只算“可運(yùn)行”進(jìn)程。不喜歡那樣;問題是在“快速”交換或等的進(jìn)程,即不可中斷 I / O,也會(huì)消耗資源。當(dāng)您長右慢速換磁盤替換快速交換盤時(shí),平均負(fù)載下降乎有點(diǎn)不直觀...... 無論如何,下面的補(bǔ)丁似乎使負(fù)載平值更加一致 WRT 系統(tǒng)的主觀速度。而,最重要的是,當(dāng)沒人做任何事情時(shí),負(fù)仍然為零。;-)”這一補(bǔ)丁提交者的主要想是平均負(fù)載應(yīng)該表對(duì)系統(tǒng)所有資源的需情況,而不應(yīng)該只表對(duì) CPU 資源的需求。假設(shè)某個(gè) TASK_UNINTERRUPTIBLE 狀態(tài)的進(jìn)程因?yàn)榈却疟P IO 而排隊(duì)的話,此時(shí)它并不倍伐耗 CPU,但是正在等磁盤等件資源。那么它是應(yīng)體現(xiàn)在平均負(fù)載的計(jì)里的。所以作者把 TASK_UNINTERRUPTIBLE 狀態(tài)的進(jìn)程都表現(xiàn)到均負(fù)載里了。所以,載高低表明的是當(dāng)前統(tǒng)上對(duì)系統(tǒng)資源整體求更情況。如果負(fù)載高,可能是 CPU 資源不夠了,也可能磁盤 IO 資源不夠了,所以還需女英配合它觀測命令具體分情分析。四、總結(jié)今天帶大家深入地學(xué)習(xí)了下 Linux 中的負(fù)載。我們根據(jù)一女尸來總結(jié)一下今天學(xué)到內(nèi)容。我把負(fù)載工作理分成了如下三步。1.內(nèi)核定時(shí)匯總每 CPU 負(fù)載到系統(tǒng)瞬時(shí)負(fù)載2.內(nèi)核使用指數(shù)加權(quán)移動(dòng)平均快速計(jì)過去 1、5、15 分鐘的平均數(shù)3.用戶進(jìn)程通過打開 loadavg 讀取內(nèi)核中的平均負(fù)載我們?cè)倩?來總結(jié)一下開篇提到幾個(gè)問題。1.負(fù)載是如何計(jì)算出來多寓?是定時(shí)將每個(gè) CPU 上的運(yùn)行隊(duì)列中 running 和 uninterruptible 的狀態(tài)的進(jìn)程數(shù)量匯總到一個(gè)鬻子局系瞬時(shí)負(fù)載值中,然后定時(shí)使用指數(shù)加權(quán)移平均法來統(tǒng)計(jì)過去 1 分鐘、過去 5 分鐘、過去 15 分鐘的平均負(fù)載。2.負(fù)載高低和 CPU 消耗正相關(guān)嗎?負(fù)載高低明的是當(dāng)前系統(tǒng)上對(duì)統(tǒng)資源整體需求更情。如果負(fù)載變高,可是 CPU 資源不夠了,也可能是磁盤 IO 資源不夠了。所以不能蔿國看著負(fù)載變高就覺得是 CPU 資源不夠用了。3.內(nèi)核是如何暴露負(fù)載數(shù)據(jù)應(yīng)用層的?內(nèi)核定義一個(gè)偽文件 /proc/ loadavg,每當(dāng)用戶打開這個(gè)件的時(shí)候,內(nèi)核中的 loadavg_proc_show 函數(shù)就會(huì)被調(diào)用到,該函中訪問 avenrun 全局?jǐn)?shù)組變量,并將平駁負(fù)載從整數(shù)轉(zhuǎn)為小數(shù),然后打印出?

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

IT之家 1 月 10 日消息,一款型號(hào)為?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í)機(jī)型,聞獜計(jì)會(huì)在印度等海外市場發(fā)售。IT之家查詢獲悉,天璣 900 芯片發(fā)布于 2021 年,基于臺(tái)積電 6nm 工藝制程打造,采用八核 CPU 架構(gòu)設(shè)計(jì),包括 2 個(gè) 2.4GHz A78 大核和 6 個(gè) 2.0GHz A55 小核,得益于制程工藝和架構(gòu)的提升天璣 900 對(duì)比前代,單核性能提升最多 18%。天璣 900 首發(fā) Mali-G68 MC4 GPU,單核頻率和旗艦級(jí)的 Mali-G78 相同,同時(shí)它還搭載了 MediaTek MiraVision 畫質(zhì)引擎,支持 LPDDR5 + UFS 3.1,支持 MediaTek Imagiq 5.0 圖像處理技術(shù),采用多核 ISP,搭載獨(dú)家的硬件級(jí) 4K HDR 視頻錄制引擎,最高支持 1.08 億像素傳感器吉量

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

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

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

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

                    陆丰市| 玉门市| 永州市| 安乡县| 乌兰县| 阜新| 迁安市| 东兴市| 洪江市| 吉首市| 温宿县| 丹江口市| 调兵山市| 凤山市| 慈利县| 旬阳县| 安义县| 广河县| 炎陵县| 固始县| 横山县| 格尔木市| 南京市| 察隅县| 濮阳市| 牡丹江市| 丹巴县| 万山特区| 库车县| 七台河市| 大英县| 安康市| 沧源| 股票| 乌拉特中旗| 筠连县|