亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 3386 | 回復(fù): 8
打印 上一主題 下一主題

求證 sed 的內(nèi)存使用(以文件倒序排放為例)  關(guān)閉 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2004-03-17 09:35 |只看該作者 |倒序瀏覽
記得以前看到過將文件內(nèi)容倒序的經(jīng)典例子,但有一天晚上突然想不起來了,只記得思路是將pattern space中的內(nèi)容放入hold space中,再取出來。照著這個思路我想啊想,終于想出了如下代碼:
  1. sed '1!G;$!h;$!d' filename
復(fù)制代碼

第二天早上急忙來本版看到底是如何寫的,發(fā)現(xiàn)是如下寫法:
  1. sed '1!G;h;$!d' filename
復(fù)制代碼

差別在于我寫的在h前多加了一個$!
      我就想了,照我們寫程序的人的習(xí)慣思維,將判斷寫入循環(huán)內(nèi)將降低程序的性能,也就是我的寫法中多加的判斷降低程序的性能。另外,因為pattern space和 hold space中均會存放大量的文本,這個腳本會很占內(nèi)存。照邏輯來說,最后一次的h是沒有必要的,他無端占用了更多的內(nèi)存。
    于是我就想測試一下,比較一下這兩種寫法的性能如何。不料卻發(fā)現(xiàn)了另外一個事實。也就是說,當(dāng)我測試的這個文件的大小超過4097時,無論哪一種寫法都會core掉,所以性能是測不出來了。但我就疑惑了:

   sed到底是如何使用內(nèi)存的呢?

論壇徽章:
0
2 [報告]
發(fā)表于 2004-03-17 10:10 |只看該作者

求證 sed 的內(nèi)存使用(以文件倒序排放為例)

太高深了,不大懂,頂一下。

論壇徽章:
0
3 [報告]
發(fā)表于 2004-03-17 12:52 |只看該作者

求證 sed 的內(nèi)存使用(以文件倒序排放為例)

[quote]原帖由 "skydog2002"]當(dāng)我測試的這個文件的大小超過4097時,無論哪一種寫法都會core掉[/quote 發(fā)表:

沒這么脆弱吧?我測試一個你的20倍的都沒有問題呀。答案為 sed '1!G;h;$!d' 用時更少。

論壇徽章:
0
4 [報告]
發(fā)表于 2004-03-17 15:44 |只看該作者

求證 sed 的內(nèi)存使用(以文件倒序排放為例)

我用hp unix 11.0時是4098個字節(jié)就會 Memory fault(coredump),
用sco unix時是8210個字節(jié)就會 Memory fault(coredump)

所以我的疑惑已經(jīng)不在于哪種用時更少,而是在于:

我加了“$!”在h之前,對于內(nèi)存的使用看不到任何差別,
兩種方法的 core 掉的文件尺寸的上界是一樣的。
而我的想法是在加了“$!”在h之前的時候,core 掉的文件尺寸的上界應(yīng)該大一些。


為什么呢?

所以我希望對這方面有研究的先行者在這里稍作解釋。謝了!

論壇徽章:
0
5 [報告]
發(fā)表于 2004-03-17 19:05 |只看該作者

求證 sed 的內(nèi)存使用(以文件倒序排放為例)

這個問題有意思,值得關(guān)注。

論壇徽章:
0
6 [報告]
發(fā)表于 2004-03-18 09:35 |只看該作者

求證 sed 的內(nèi)存使用(以文件倒序排放為例)

終于稍有了一些認識。在說明之前,首寫糾正我先前的一個說法。
原帖由 "skydog2002" 發(fā)表:
照邏輯來說,最后一次的h是沒有必要的,他無端占用了更多的內(nèi)存。

這個說法欠妥,其實沒有占用了更多的內(nèi)存,只是占用了文件的最后一行大小的內(nèi)存。讓我們分析一下這個腳本:
  1. 1!G;h;$!d
復(fù)制代碼

我們假定要處理的文件有n行,當(dāng)前行為m行。
當(dāng)m=1時,這三個命令執(zhí)行完畢后,
pattern space內(nèi)容:第二行的內(nèi)容
hold space內(nèi)容:第一行的內(nèi)容
......
依次執(zhí)行到第m行后
pattern space內(nèi)容:第m+1行的內(nèi)容
hold space內(nèi)容:前m行的內(nèi)容的倒序排放
......
當(dāng)m=n時,也就是說執(zhí)行到第n-1行之后,
pattern space內(nèi)容:第n行的內(nèi)容
hold space內(nèi)容:前n-1行的內(nèi)容的倒序排放
此時在執(zhí)行這三個命令:
1!G -- 將hold space的內(nèi)容附加于pattern space中的第n行之后
       pattern space內(nèi)容變?yōu)榍皀行的內(nèi)容的倒序排放
h    -- 將pattern space內(nèi)容覆蓋 hold space的內(nèi)容
       hold space內(nèi)容變?yōu)榍皀行的內(nèi)容的倒序排放(較先前多了文件最后一行的內(nèi)容)
$!d  -- 不執(zhí)行
此時沒有下一行了,將pattern space中的內(nèi)容輸出。

大體就是這樣子了。所以說,我先前的說法欠妥。

論壇徽章:
0
7 [報告]
發(fā)表于 2004-03-18 09:43 |只看該作者

求證 sed 的內(nèi)存使用(以文件倒序排放為例)

我發(fā)現(xiàn)我測試的文件有一些問題,問題在于我測試的文件的最后一行內(nèi)容多了些。所以我得出的結(jié)論,兩次測試的core掉的文件尺寸上限一樣,就是不對的了。

我將測試文件改為,最后幾行均為一個字符,終于測出在文件大小在4098時,
  1. sed '1!G;$!h;$!d' filename
復(fù)制代碼

沒有core掉;
  1. sed '1!G;h;$!d' filename
復(fù)制代碼

core掉。

我測試的環(huán)境是hpunix

不過可惜的是,我的寫法雖然沒有core掉,但是也沒有輸出。

至于為什么會core掉,我只能猜想sed中預(yù)先為兩個空間分配了內(nèi)存,不同的系統(tǒng),分配的大小不一樣,超過了這個尺寸就會core

至于為什么沒有輸出,原因找不出來。

有些遺憾,但苦于找不到資料,只好以后有機會再說了。

謝謝朽木可雕 、labrun兩位的關(guān)注。

論壇徽章:
0
8 [報告]
發(fā)表于 2004-03-18 12:32 |只看該作者

求證 sed 的內(nèi)存使用(以文件倒序排放為例)

[quote]原帖由 "朽木可雕"]太高深了,不大懂,頂一下。[/quote 發(fā)表:

同感 @_@

論壇徽章:
0
9 [報告]
發(fā)表于 2004-03-18 17:21 |只看該作者

求證 sed 的內(nèi)存使用(以文件倒序排放為例)

我在本版看到過兩篇帖子,其中一篇就是版主看到的,另外一篇專門討論模式空間與保持空間,那幾天研究里面的例子真是幾乎想破了頭,但是還是很迷惑,很多不懂,感覺就像用匯編,只有幾個寄存器讓你用。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP