__user && address_space(1)

所有的核心代碼,基本都包含了linux/compile.h這個檔案,所以它是基礎,打算先分析這個檔案裡的代碼看看,有空再分析分析其它的代碼。首先印入眼帘的是對__ASSEMBLY__這個宏的判斷,這個變數實際是在編譯彙編代碼的時候,由編譯器使用-D這樣的參數加進去的,AFLAGS這個變數也定義了這個變數,gcc會把這個宏定義為1。用在這裡,是因為彙編代碼裡,不會用到類似於__user這樣的屬性(關於__user這樣的屬性是怎麼回子事,本文後面會提到),因為這樣的屬性是在定義函數的時候加的,這樣避

POJ 2482 Stars in Your Window(掃描線)

題意:給你10000以內的星星的座標和星星的亮度(即分別為x,y,c),要求用W*H的矩形去圍住一個地區,使得這個地區內的星星的亮度最大,並且要求矩形邊框上的星星不計入內。矩形可以平移,但不能旋轉。對於每一個星星,分別建立線(x,y,y+H,c)和(x+W,y,y+H,-c)。這樣處理的原因是我們就可以把問題轉化成求線段樹裡某一段內的最大值,即區間查詢。矩形邊框上的星星不計的處理方法是:1.對於x軸方面的處理是在排序的時候,優先-c的邊,因為如果優先+c的邊,那麼就是將邊框上的星星計入了。2.對

hdu 3642 Get The Treasure(掃描線)

題意:有T給測試資料,每組資料先給一個數字N,接下來的N行裡,每行裡有6個數字,分別是x1,y1,z1,x2,y2,z2,表示這個長方體x軸方向的範圍從x1到x2,y座標和z座標類似,求至少有三個長方體相交的體積是多少。        因為Z軸的範圍很小,所以我們將Z軸離散化之後,枚舉Z[i]和Z[i+1]之間,矩形並時覆蓋了三次以上的面積,那麼這時候,就可以求出在Z[i]和Z[i+1]之間題目所求的體積,遍曆一次Z座標,也就得出了答案。如果求矩形並時覆蓋超過三次的面積,與hdu 1255

hdu 1255 覆蓋的面積(掃描線)

題意:有T組測試資料,每組資料先給一個數字N,接下來的N行裡,每行四個浮點數表示矩形的左上方座標和右下角座標,要求這些矩形至少覆蓋過兩次的面積。        與POJ 1151 Atlantis 的差別是,我們在答案裡加上的不是覆蓋一次的長度乘以兩條線之間x座標的差,而是用覆蓋兩次的長度,那麼問題就變成如果從覆蓋一次的面積得到覆蓋兩次的面積。        為敘述方便,我們假設len[2]為當前線段被覆蓋了兩次的長度,len[1]為當前線段被覆蓋了一次的長度,而len[0]就是這條線段的長度,

POJ 1177 Picture & hdu 1828 Picture(掃描線)

題意:給你n個矩形,要你求出矩形並的輪廓周長。在做這題之前,建議先解決POJ1151。在求矩形並面積的時候,我們記錄了線段投影到y軸上被覆蓋的長度,這題同樣要記錄這個值以得到y軸上屬於輪廓的邊長(當然,不是簡單地把這個長加進去,而是加變化值)。不同的是,還要記錄,y軸上有連續的幾段。比如,這時候有兩個線段,線段a(line[i]表示),線段b(line[i-1]),a和b並不相鄰,即這時候,在y軸上有兩條線段,那麼在x軸方向上的屬於輪廓的長度就是2*2*(line[i].x-line[i-1].

#define barrier() __asm__ __volatile__(“”: : :”memory”) 中的memory是gcc的東西

gcc內嵌彙編簡介在內嵌彙編中,可以將C語言運算式指定為彙編指令的運算元,而且不用去管如何將C語言運算式的值讀入哪個寄存器,以及如何將計算結果寫回C 變數,你只要告訴程式中C語言運算式與彙編指令運算元之間的對應關係即可, GCC會自動插入程式碼完成必要的操作。1、簡單的內嵌彙編例:__asm__ __volatile__("hlt");

POJ 1151 Atlantis(掃描線)

題意:給你n個矩形,每個矩形給出左下點的座標,右上點的座標。最後以n=0為結束。要你求出矩形並後的面積。         掃描線。 在陳宏的論文裡這麼定義超元線段:根據每個矩形縱向邊的橫座標縱向地對平面進行2*n次切割、根據矩形橫向邊的縱座標橫向地對矩形進行2*n次切割(n為矩形個數),切割後得到的矩形的被切割後的小段邊就是超元線段。         現在我們僅考慮未被橫向的邊切割的超元線段(即矩形縱向的邊),這些邊上的直線把矩形分成這2*n-1塊地區,而這些地區的面積和也就是矩形並後的面積。 

hdu 3954 Level up(成段更新)

題意:有N個英雄,每個英雄的初始等級為1,初始經驗為0,有K個等級,QW個操作。接下來一行中有K-1個數值,代表升到等級2,等級3……所要達到的經驗。接下來的QW行裡,每行是一個操作,操作有兩類,(1)"l r e",代表區間[l,r]裡的每個英雄將得到e乘以他的等級的經驗。(2)"l r",表示查詢區間[l,r]裡經驗最大值。        除了可以分成k棵線段樹做之外,也可以合成一棵線段樹做。       

UESTC 1525 Fruit Ninja(掃描線)

題意:有T組測試資料,每組資料的N,H,W表示有N個炸彈或水果,H和W表示用來“切”水果的板磚的長寬,要求W必須平行於X軸,H必須平行於Y軸。問一板磚下去,最多能拍到多少個水果(要求不能拍到炸彈),在拍到最多水果的前提下,問板磚有多少種拍水果的方案(即如果板磚的四條邊上都要水果“犧牲”,那麼方案數計一,否則板磚就可移動,那麼方案數就是so many!)        下面的N行,每行給出炸彈或水果的座標,L X

read 系統調用剖析 (vfs分析 address_space page cache)

Read 系統調用在使用者空間中的處理過程Linux 系統調用(SCI,system call interface)的實現機制實際上是一個多路匯聚以及分解的過程,該匯聚點就是 0x80 中斷這個進入點(X86 系統結構)。也就是說,所有系統調用都從使用者空間中匯聚到 0x80 中斷點,同時儲存具體的系統調用號。當 0x80 中斷處理常式運行時,將根據系統調用號對不同的系統調用分別處理(調用不同的核心功能處理)。系統調用的更多內容,請參見參考資料。Read

ZOJ 3511 Cake Robbery(成段更新)

題意:有一個N凸邊形,順時針編號1到N,沿對角線切了M刀,保證任意兩刀之間不相交(除了端點),問在切這M刀的過程中,得到的凸多邊形的最大的邊數是多少。第一行給出N和M後,接下來的M行裡,每行給出這刀切的起點端點st和終點端點ed。多邊形的邊數等於點數。感覺方法很巧妙,將每個操作,按切掉的點的個數從小到大排序(點的個數這裡可以看作ed-st+1)。當切掉這部分的時候,就將線段樹裡的這個範圍內的點全部去除(成段更新)。在這個過程中,找出最大解就可以了。#include

hdu 3340 Rain in ACStar(成段更新)

題意:有T組測試資料,每組資料有N個操作,(1)“R P”,表示掉下了一個P邊形,接下來的一行裡,給出這P個點的座標——首先是最左邊的點,然後從這點開始逆時針給出其他點。(2)"Q A B“,查詢數軸上區間[A,B]內面積的和。        易知,圖1裡的那個三角形的面積是通過,圖2裡紅色的面積加3裡綠色的面積,然後減去圖4裡黃色的面積。        這些圖形都可以轉化成梯形,即在一段區間[A,B]裡,A加上首項為add1,B加上末項為add2,長度為B-A+1,公差是(add2-add1)

hdu 4052 Adding New Machine

題意:給你W*H大小的矩形,其中有N個地區不能使用(給出了這個地區的兩個頂點的座標即(x1,y1)和(x2,y2)),問能下多少個1*M的矩形。分別統計1*M的矩形橫著放能放多少個,豎著放能放多少個。可以轉化成統計哪些位置可以放這矩形的第一個方格。比如說,當我們統計橫著能放多少個的時候,問題轉化成找出有多少個這樣的方格(i,j),使得(i,j+1),(i,j+2)……(i,j+m-1)都是可以被使用的。易得,(x1,y1-m+1)到(x2,y2)這個地區內的方格都是不滿足要求的。把不滿足條件的方

hdu 3016 Man Down(成段更新,單點查詢)

題意:有N塊木板,每塊木板有四個屬性,高h(h>0),左邊界xl,右邊界xr(0<xl<xr<100000),以及掉落在它上面,獲得多少生命值value(-1000<value<1000),一個人從最高的木板開始往下跳,初始時生命值為100,問最後掉落到地面能獲得的生命值最多為多少(如果生命值為0,那麼這個人會死去),如果無法跳到地面,輸出-1。這是一個簡單的DP或者說最長路。但是木板的數目很大,如果建立每個木板到其他木板的轉移用O(N^2)的複雜度,顯然是會

uva 11983 Weird Advertisement(掃描線)

題意:給出N個矩形,求被這些矩形覆蓋K次以上的地區面積。做過hdu 3642 Get The Treasure和hdu 1255 覆蓋的面積這道題應該不難才是。#include <iostream>#include <cstdio>#include <cstring>#include <vector>#include <map>#include <algorithm>using namespace std;#define

hdu 3333 Turing Tree & hdu 3874 Necklace (成段更新)

題意:有T(1<=T<=10)組測試資料,每組資料有N(1<=N<=30000)個數。接下來有Q個查詢,表示查詢區間[l,r]之間的數的和,但是出現多次的值,只能加進和裡一次。可以用離線的方法,方法如我之前關於Codeforces Round #136 (Div. 2) D. Little Elephant and Array的解題報告裡介紹的兩種方法沒有什麼太大的區別。另外hdu 3874 Necklace只是變化了資料範圍,其他的都一樣。#include

hdu 3544 Farming(掃描線)

題意:有N塊農田,每塊農田中種一種作物,每種作物都有一個價格,當在同一地區內種植了兩種不同的作物時,作物價格大的生存下來,作物價格小的死亡。求最後的所有作物的能買的總錢數。       將作物的價格轉化為高,問題就變成了求長方體體積的並了,用法跟hdu 3642 Get The Treasure很類似。#include <iostream>#include <cstdio>#include <cstring>#include

virtualbox 共用資料夾

1. 安裝增強功能包(Guest Additions)cd /media/cdom0sudo ./VboxLinuxAdditions.run 2. 設定共用資料夾重啟完成後點擊"裝置(Devices)" -> 共用資料夾(Shared Folders)菜單,添加一個共用資料夾,選項固定和臨時是指該檔案夾是否是持久的。共用名稱可以任取一個自己喜歡的,比如"gongxiang",盡量使用英文名稱。 3. 掛載共用資料夾重新進入虛擬Ubuntu,在命令列終端下輸入:sudo mkdir

poj 2464 Brownie Points II (掃描線)

題意:在平面直角座標系中給你N個點,stan和ollie玩一個遊戲,首先stan在豎直方向上畫一條直線,該直線必須要過其中的某個點,然後ollie在水平方向上畫一條直線,該直線的要求是要經過一個stan之前畫過的點。 這時候平面就被分割成了四塊,兩個人這時候會有一個得分,stan的得分是平面上第1、3象限內的點的個數,ollie的得分是平面上第2、4象限內的點的個數,在統計的時候在所畫線上的點都不計算在內。求最終stan使得自己的最差得分最高,並且輸出此時ollie的得分。       

自旋鎖(spinlock) 解釋得經典,透徹

自旋鎖與互斥鎖有點類似,只是自旋鎖不會引起調用者睡眠,如果自旋鎖已經被別的執行單元保持,調用者就一直迴圈在那裡看是否該自旋鎖的保持者已經釋放了鎖,"自旋"一詞就是因此而得名。  由於自旋鎖使用者一般保持鎖時間非常短,因此選擇自旋而不是睡眠是非常必要的,自旋鎖的效率遠高於互斥鎖。  訊號量和讀寫訊號量適合於保持時間較長的情況,它們會導致調用者睡眠,因此只能在進程上下文使用(_trylock的變種能夠在中斷上下文使用),而自旋鎖適合於保持時間非常短的情況,它可以在任何上下文使用。  如果被保護的共用

總頁數: 61357 1 .... 18267 18268 18269 18270 18271 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.