[#13493] yield *[[]] — Tanaka Akira <akr@...17n.org>

しばらく前に、yield *[[]] の挙動に関して bug report をして、まつもとさ

96 messages 2001/06/07
[#13494] Re: yield *[[]] — nobu.nakada@... 2001/06/07

なかだです。

[#13496] Re: yield *[[]] — Tanaka Akira <akr@...17n.org> 2001/06/08

In article <200106071409.XAA21101@sharui.nakada.kanuma.tochigi.jp>,

[#13503] Re: yield *[[]] — matz@... (Yukihiro Matsumoto) 2001/06/08

まつもと ゆきひろです

[#13506] Re: yield *[[]] — Tanaka Akira <akr@...17n.org> 2001/06/08

In article <991988462.179562.20598.nullmailer@ev.netlab.zetabits.com>,

[#13512] Re: yield *[[]] — matz@... (Yukihiro Matsumoto) 2001/06/08

まつもと ゆきひろです

[#13497] Re: yield *[[]] — Shugo Maeda <shugo@...> 2001/06/08

前田です。

[#13500] Re: yield *[[]] — "K.Kosako" <kosako@...> 2001/06/08

Shugo Maedaさんの<87lmn336s3.wl@localhost.netlab.jp>から

[#13501] Re: yield *[[]] — Shugo Maeda <shugo@...> 2001/06/08

前田です。

[#13504] Re: yield *[[]] — "K.Kosako" <kosako@...> 2001/06/08

Shugo Maedaさんの<87hexr316u.wl@localhost.netlab.jp>から

[#13505] Re: yield *[[]] — Shugo Maeda <shugo@...> 2001/06/08

前田です。

[#13511] Re: yield *[[]] — matz@... (Yukihiro Matsumoto) 2001/06/08

まつもと ゆきひろです

[#13526] Re: yield *[[]] — Shugo Maeda <shugo@...> 2001/06/09

前田です。

[#13530] Re: yield *[[]] — Tanaka Akira <akr@...17n.org> 2001/06/09

In article <m38zj242y9.wl@localhost.localdomain>,

[#13549] Re: yield *[[]] — Shin-ichiro HARA <sinara@...> 2001/06/12

原です。

[#13553] Re: yield *[[]] — Tanaka Akira <akr@...17n.org> 2001/06/12

In article <4.3.2-J.20010612154813.02c89a70@blade.nagaokaut.ac.jp>,

[#13554] Re: yield *[[]] — Shin-ichiro HARA <sinara@...> 2001/06/12

原です。

[#13560] Re: yield *[[]] — Tanaka Akira <akr@...17n.org> 2001/06/13

In article <4.3.2-J.20010612185543.00c8b988@blade.nagaokaut.ac.jp>,

[#13561] Re: yield *[[]] — matz@... (Yukihiro Matsumoto) 2001/06/13

まつもと ゆきひろです

[#13566] Re: yield *[[]] — Tanaka Akira <akr@...17n.org> 2001/06/13

In article <992410104.066682.22743.nullmailer@ev.netlab.zetabits.com>,

[#13591] Re: yield *[[]] — Tanaka Akira <akr@...17n.org> 2001/06/14

In article <hvor8wo501g.fsf@flux.etl.go.jp>,

[#13597] Re: yield *[[]] — matz@... (Yukihiro Matsumoto) 2001/06/14

まつもと ゆきひろです

[#13598] Re: yield *[[]] — Tanaka Akira <akr@...17n.org> 2001/06/15

In article <992533086.935976.4066.nullmailer@ev.netlab.zetabits.com>,

[#13616] Re: yield *[[]] — matz@... (Yukihiro Matsumoto) 2001/06/19

まつもと ゆきひろです

[#13622] Re: yield *[[]] — matz@... (Yukihiro Matsumoto) 2001/06/22

まつもと ゆきひろです

[#13628] Re: yield *[[]] — matz@... (Yukihiro Matsumoto) 2001/06/23

まつもと ゆきひろです

[#13633] Re: yield *[[]] — keiju@... (石塚圭樹) 2001/06/24

けいじゅ@日本ラショナルソフトウェアです.

[#13647] Re: yield *[[]] — "KANEMITSU Masao" <masao-k@...> 2001/06/25

金光です。

[#13567] Parallel Assignment — Shin-ichiro HARA <sinara@...> 2001/06/13

原です。

[#13577] Re: Parallel Assignment — matz@... (Yukihiro Matsumoto) 2001/06/13

まつもと ゆきひろです

[#13650] Re: [ruby-ext:01803] Re: Ruby/SDL on PS2 LinuxKit — WATANABE Hirofumi <eban@...>

わたなべです。

56 messages 2001/06/26
[#13653] Re: [ruby-ext:01803] Re: Ruby/SDL on PS2 LinuxKit — matz@... (Yukihiro Matsumoto) 2001/06/26

まつもと ゆきひろです

[#13659] library search path — matz@... (Yukihiro Matsumoto) 2001/06/26

まつもと ゆきひろです

[#13906] Re: library search path — nobu.nakada@... 2001/07/16

なかだです。

[#13978] Re: library search path — nobu.nakada@... 2001/07/21

なかだです。

[#13990] Re: library search path — matz@... (Yukihiro Matsumoto) 2001/07/22

まつもと ゆきひろです

[#14002] Re: library search path — nobu.nakada@... 2001/07/23

なかだです。

[#14011] Re: library search path — matz@... (Yukihiro Matsumoto) 2001/07/23

まつもと ゆきひろです

[#14017] Re: library search path — "U.Nakamura" <usa@...> 2001/07/24

こんにちは、なかむら(う)です。

[#14020] Re: library search path — matz@... (Yukihiro Matsumoto) 2001/07/24

まつもと ゆきひろです

[#14036] Re: library search path — nobu.nakada@... 2001/07/24

なかだです。

[#14075] Re: library search path — nobu.nakada@... 2001/07/25

なかだです。

[#14079] Re: library search path — matz@... (Yukihiro Matsumoto) 2001/07/25

まつもと ゆきひろです

[#14090] Re: library search path — nobu.nakada@... 2001/07/25

なかだです。

[#14095] Re: library search path — matz@... (Yukihiro Matsumoto) 2001/07/26

まつもと ゆきひろです

[#14115] Re: library search path — akira yamada / やまだあきら <akira@...> 2001/07/26

[#14121] Re: library search path — matz@... (Yukihiro Matsumoto) 2001/07/26

まつもと ゆきひろです

[#14136] Re: library search path — matz@... (Yukihiro Matsumoto) 2001/07/27

まつもと ゆきひろです

[#14137] Re: library search path — nobu.nakada@... 2001/07/27

なかだです。

[#14138] Re: library search path — matz@... (Yukihiro Matsumoto) 2001/07/27

まつもと ゆきひろです

[#14141] Re: library search path — nobu.nakada@... 2001/07/27

なかだです。

[#14142] Re: library search path — matz@... (Yukihiro Matsumoto) 2001/07/27

まつもと ゆきひろです

[#14148] Re: library search path — nobu.nakada@... 2001/07/28

なかだです。

[#13666] net/http.rb warnings — nobu.nakada@...

なかだです。

14 messages 2001/06/26

[#13668] ruby_m17n make error — TAKAHASHI Masayoshi <maki@...>

高橋征義です。

43 messages 2001/06/26
[#14038] Re: m17n ruby 特に TRON 文字コード — "TOYOFUKU Chikanobu" <toyofuku@...> 2001/07/24

豊福です。

[#13705] eval(code, true, filename) — Shugo Maeda <shugo@...>

前田です。

14 messages 2001/06/29

[ruby-dev:13663] Re: very long array and GC.

From: matz@... (Yukihiro Matsumoto)
Date: 2001-06-26 09:41:15 UTC
List: ruby-dev #13663
まつもと ゆきひろです

In message "[ruby-dev:13662] Re: very long array and GC."
    on 01/06/26, 石塚圭樹 <keiju@ishitsuka.com> writes:

|というか, こういうのって, どういう風に使っているかですよね. ですので, ヒー
|プの割り当てアルゴリズムを指定できると嬉しいとおもいますが.

それは私の考えとは違います。

というのも、現状のRubyではヒープの解放ができないので、調整で
きる選択肢は非常に限定されます。オブジェクトの割り当てパター
ンなんてそんなに多彩ではないので、その限られた選択肢の中で判
断するのに必要な情報をGCは十分に入手できると思います。

また、GCのような裏方には賢くあってほしいというのが私の好みで
もあります。

というわけで添付のようなパッチを作ってみました。田中さんの基
本的なアイディアの通り倍々で増やしていきますが、mallocに失敗
した時点でヒープの増加サイズを初期値に戻してやり直しています。

                                まつもと ゆきひろ /:|)

--- gc.c	2001/06/19 15:41:18	1.70
+++ gc.c	2001/06/26 09:39:53
@@ -260,3 +260,6 @@
 
-#define HEAP_SLOTS 10000
+#define HEAP_MIN_SLOTS 10000
+static int *heaps_limits;
+static int heap_slots = HEAP_MIN_SLOTS;
+
 #define FREE_MIN  4096
@@ -277,9 +280,25 @@
 	if (heaps == 0) mem_error("heaps: can't alloc memory");
+	RUBY_CRITICAL(heaps_limits = (heaps_used>0)?
+			(int*)realloc(heaps_limits, heaps_length*sizeof(int)):
+			(int*)malloc(heaps_length*sizeof(int)));
+	if (heaps_limits == 0) mem_error("heaps_limits: can't alloc memory");
     }
 
-    RUBY_CRITICAL(p = heaps[heaps_used++] = (RVALUE*)malloc(sizeof(RVALUE)*HEAP_SLOTS));
-    if (p == 0) mem_error("add_heap: can't alloc memory");
-    pend = p + HEAP_SLOTS;
+    for (;;) {
+	RUBY_CRITICAL(p = heaps[heaps_used] = (RVALUE*)malloc(sizeof(RVALUE)*heap_slots));
+	heaps_limits[heaps_used] = heap_slots;
+	if (p == 0) {
+	    if (heap_slots == HEAP_MIN_SLOTS) {
+		mem_error("add_heap: can't alloc memory");
+	    }
+	    heap_slots = HEAP_MIN_SLOTS;
+	    continue;
+	}
+	break;
+    }
+    pend = p + heap_slots;
     if (lomem == 0 || lomem > p) lomem = p;
     if (himem < pend) himem = pend;
+    heaps_used++;
+    heap_slots *= 2;
 
@@ -339,4 +358,4 @@
 	heap_org = heaps[i];
-	if (heap_org <= p && p < heap_org + HEAP_SLOTS
-	    && ((((char*)p)-((char*)heap_org))%sizeof(RVALUE)) == 0)
+	if (heap_org <= p && p < heap_org + heaps_limits[i] &&
+	    ((((char*)p)-((char*)heap_org))%sizeof(RVALUE)) == 0)
 	    return Qtrue;
@@ -514,2 +533,4 @@
 	  case NODE_RETURN:
+	  case NODE_BREAK:
+	  case NODE_NEXT:
 	  case NODE_YIELD:
@@ -541,4 +562,2 @@
 	  case NODE_VALIAS:
-	  case NODE_BREAK:
-	  case NODE_NEXT:
 	  case NODE_REDO:
@@ -678,3 +697,3 @@
 	for (i = 0; i < used; i++) {
-	    p = heaps[i]; pend = p + HEAP_SLOTS;
+	    p = heaps[i]; pend = p + heaps_limits[i];
 	    while (p < pend) {
@@ -693,3 +712,3 @@
 
-	p = heaps[i]; pend = p + HEAP_SLOTS;
+	p = heaps[i]; pend = p + heaps_limits[i];
 	while (p < pend) {
@@ -1047,3 +1066,3 @@
 
-	p = heaps[i]; pend = p + HEAP_SLOTS;
+	p = heaps[i]; pend = p + heaps_limits[i];
 	for (;p < pend; p++) {
@@ -1080,3 +1099,3 @@
 
-	p = heaps[i]; pend = p + HEAP_SLOTS;
+	p = heaps[i]; pend = p + heaps_limits[i];
 	for (;p < pend; p++) {
@@ -1247,3 +1266,3 @@
 	for (i = 0; i < heaps_used; i++) {
-	    p = heaps[i]; pend = p + HEAP_SLOTS;
+	    p = heaps[i]; pend = p + heaps_limits[i];
 	    while (p < pend) {
@@ -1260,3 +1279,3 @@
     for (i = 0; i < heaps_used; i++) {
-	p = heaps[i]; pend = p + HEAP_SLOTS;
+	p = heaps[i]; pend = p + heaps_limits[i];
 	while (p < pend) {

In This Thread