Enviar pesquisa
Carregar
メモリアロケーションからみた拡張ライブラリに大切なこと
•
8 gostaram
•
4,647 visualizações
Masaya TARUI
Seguir
C Extension and GC in Ruby
Leia menos
Leia mais
Tecnologia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 27
Baixar agora
Baixar para ler offline
Recomendados
Rubyと機械学習の現状
Rubyと機械学習の現状
Aki Ariga
14対話bot発表資料
14対話bot発表資料
Keiichirou Miyamoto
Python による 「スクレイピング & 自然言語処理」入門
Python による 「スクレイピング & 自然言語処理」入門
Tatsuya Tojima
RubySeminar16_Analyze
RubySeminar16_Analyze
sady_nitro
PythonによるWebスクレイピング入門
PythonによるWebスクレイピング入門
Hironori Sekine
Use Japanese with vcd/vcdExtra package
Use Japanese with vcd/vcdExtra package
Tsuda University Institute for Mathematics and Computer Science
青本勉強会2章
青本勉強会2章
Keiichirou Miyamoto
RFinanceJはじめました
RFinanceJはじめました
Nagi Teramo
Recomendados
Rubyと機械学習の現状
Rubyと機械学習の現状
Aki Ariga
14対話bot発表資料
14対話bot発表資料
Keiichirou Miyamoto
Python による 「スクレイピング & 自然言語処理」入門
Python による 「スクレイピング & 自然言語処理」入門
Tatsuya Tojima
RubySeminar16_Analyze
RubySeminar16_Analyze
sady_nitro
PythonによるWebスクレイピング入門
PythonによるWebスクレイピング入門
Hironori Sekine
Use Japanese with vcd/vcdExtra package
Use Japanese with vcd/vcdExtra package
Tsuda University Institute for Mathematics and Computer Science
青本勉強会2章
青本勉強会2章
Keiichirou Miyamoto
RFinanceJはじめました
RFinanceJはじめました
Nagi Teramo
Python と Xpath で ウェブからデータをあつめる
Python と Xpath で ウェブからデータをあつめる
Shuhei Iitsuka
IT業界における伝統芸能の継承 #hachiojipm
IT業界における伝統芸能の継承 #hachiojipm
鉄次 尾形
bottleで始めるWEBアプリの最初の一歩
bottleで始めるWEBアプリの最初の一歩
Satoshi Yamada
DBエンジニアに必要だったPythonのスキル
DBエンジニアに必要だったPythonのスキル
Satoshi Yamada
捗るリコメンドシステムの裏事情(ハッカドール)
捗るリコメンドシステムの裏事情(ハッカドール)
mosa siru
Rosとgazeboを使った3d空間での3次元畳み込みニューラルネットによる物体認識
Rosとgazeboを使った3d空間での3次元畳み込みニューラルネットによる物体認識
Hiroaki Kaneda
2つのmosaic plotと日本語表示
2つのmosaic plotと日本語表示
Tsuda University Institute for Mathematics and Computer Science
グラフデータベース「Neo4j」の 導入の導入
グラフデータベース「Neo4j」の 導入の導入
Hisao Soyama
Ros,gazeboとchainerを用いた畳込みニューラルネットワークによる3次元形状の学習
Ros,gazeboとchainerを用いた畳込みニューラルネットワークによる3次元形状の学習
Hiroaki Kaneda
S18 t0 introduction
S18 t0 introduction
Takeshi Akutsu
Electron + Mithril Async File Search
Electron + Mithril Async File Search
和晃 西澤
Rubyで連結リスト使うためのgemを作った(tsukuba.rb版)
Rubyで連結リスト使うためのgemを作った(tsukuba.rb版)
Sho Hosoda
深層学習ライブラリのプログラミングモデル
深層学習ライブラリのプログラミングモデル
Yuta Kashino
Ruby programmer silverの取得に向けて
Ruby programmer silverの取得に向けて
善弘 植木
再帰、漸化式、差分方程式とアルゴリズム Gx#20
再帰、漸化式、差分方程式とアルゴリズム Gx#20
鉄次 尾形
Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話
Tokoroten Nakayama
Rosのリアルタイムツールの紹介
Rosのリアルタイムツールの紹介
gakky1667
JAWS-UG沖縄第1回勉強会 EBS/RDSがなくてもwrite massiveに耐えるDBの作り方
JAWS-UG沖縄第1回勉強会 EBS/RDSがなくてもwrite massiveに耐えるDBの作り方
Koichiro Nishijima
Pythonで簡単ネットワーク分析
Pythonで簡単ネットワーク分析
antibayesian 俺がS式だ
Rubyとプログラミング言語の潮流
Rubyとプログラミング言語の潮流
Kazuhiko Kato
高度に最適化された移植可能なメモリマネージャ
高度に最適化された移植可能なメモリマネージャ
DADA246
shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理
DADA246
Mais conteúdo relacionado
Mais procurados
Python と Xpath で ウェブからデータをあつめる
Python と Xpath で ウェブからデータをあつめる
Shuhei Iitsuka
IT業界における伝統芸能の継承 #hachiojipm
IT業界における伝統芸能の継承 #hachiojipm
鉄次 尾形
bottleで始めるWEBアプリの最初の一歩
bottleで始めるWEBアプリの最初の一歩
Satoshi Yamada
DBエンジニアに必要だったPythonのスキル
DBエンジニアに必要だったPythonのスキル
Satoshi Yamada
捗るリコメンドシステムの裏事情(ハッカドール)
捗るリコメンドシステムの裏事情(ハッカドール)
mosa siru
Rosとgazeboを使った3d空間での3次元畳み込みニューラルネットによる物体認識
Rosとgazeboを使った3d空間での3次元畳み込みニューラルネットによる物体認識
Hiroaki Kaneda
2つのmosaic plotと日本語表示
2つのmosaic plotと日本語表示
Tsuda University Institute for Mathematics and Computer Science
グラフデータベース「Neo4j」の 導入の導入
グラフデータベース「Neo4j」の 導入の導入
Hisao Soyama
Ros,gazeboとchainerを用いた畳込みニューラルネットワークによる3次元形状の学習
Ros,gazeboとchainerを用いた畳込みニューラルネットワークによる3次元形状の学習
Hiroaki Kaneda
S18 t0 introduction
S18 t0 introduction
Takeshi Akutsu
Electron + Mithril Async File Search
Electron + Mithril Async File Search
和晃 西澤
Rubyで連結リスト使うためのgemを作った(tsukuba.rb版)
Rubyで連結リスト使うためのgemを作った(tsukuba.rb版)
Sho Hosoda
深層学習ライブラリのプログラミングモデル
深層学習ライブラリのプログラミングモデル
Yuta Kashino
Ruby programmer silverの取得に向けて
Ruby programmer silverの取得に向けて
善弘 植木
再帰、漸化式、差分方程式とアルゴリズム Gx#20
再帰、漸化式、差分方程式とアルゴリズム Gx#20
鉄次 尾形
Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話
Tokoroten Nakayama
Rosのリアルタイムツールの紹介
Rosのリアルタイムツールの紹介
gakky1667
JAWS-UG沖縄第1回勉強会 EBS/RDSがなくてもwrite massiveに耐えるDBの作り方
JAWS-UG沖縄第1回勉強会 EBS/RDSがなくてもwrite massiveに耐えるDBの作り方
Koichiro Nishijima
Pythonで簡単ネットワーク分析
Pythonで簡単ネットワーク分析
antibayesian 俺がS式だ
Rubyとプログラミング言語の潮流
Rubyとプログラミング言語の潮流
Kazuhiko Kato
Mais procurados
(20)
Python と Xpath で ウェブからデータをあつめる
Python と Xpath で ウェブからデータをあつめる
IT業界における伝統芸能の継承 #hachiojipm
IT業界における伝統芸能の継承 #hachiojipm
bottleで始めるWEBアプリの最初の一歩
bottleで始めるWEBアプリの最初の一歩
DBエンジニアに必要だったPythonのスキル
DBエンジニアに必要だったPythonのスキル
捗るリコメンドシステムの裏事情(ハッカドール)
捗るリコメンドシステムの裏事情(ハッカドール)
Rosとgazeboを使った3d空間での3次元畳み込みニューラルネットによる物体認識
Rosとgazeboを使った3d空間での3次元畳み込みニューラルネットによる物体認識
2つのmosaic plotと日本語表示
2つのmosaic plotと日本語表示
グラフデータベース「Neo4j」の 導入の導入
グラフデータベース「Neo4j」の 導入の導入
Ros,gazeboとchainerを用いた畳込みニューラルネットワークによる3次元形状の学習
Ros,gazeboとchainerを用いた畳込みニューラルネットワークによる3次元形状の学習
S18 t0 introduction
S18 t0 introduction
Electron + Mithril Async File Search
Electron + Mithril Async File Search
Rubyで連結リスト使うためのgemを作った(tsukuba.rb版)
Rubyで連結リスト使うためのgemを作った(tsukuba.rb版)
深層学習ライブラリのプログラミングモデル
深層学習ライブラリのプログラミングモデル
Ruby programmer silverの取得に向けて
Ruby programmer silverの取得に向けて
再帰、漸化式、差分方程式とアルゴリズム Gx#20
再帰、漸化式、差分方程式とアルゴリズム Gx#20
Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話
Rosのリアルタイムツールの紹介
Rosのリアルタイムツールの紹介
JAWS-UG沖縄第1回勉強会 EBS/RDSがなくてもwrite massiveに耐えるDBの作り方
JAWS-UG沖縄第1回勉強会 EBS/RDSがなくてもwrite massiveに耐えるDBの作り方
Pythonで簡単ネットワーク分析
Pythonで簡単ネットワーク分析
Rubyとプログラミング言語の潮流
Rubyとプログラミング言語の潮流
Destaque
高度に最適化された移植可能なメモリマネージャ
高度に最適化された移植可能なメモリマネージャ
DADA246
shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理
DADA246
Heliumエンジンの設計と実装
Heliumエンジンの設計と実装
DADA246
Component basedgameenginedesign
Component basedgameenginedesign
DADA246
20130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT77
nkt77
Design your 3d game engine
Design your 3d game engine
Daosheng Mu
Doom3 commentary
Doom3 commentary
DADA246
Vimを学びたい初心者のための5つの豆知識
Vimを学びたい初心者のための5つの豆知識
alwei
FrameGraph: Extensible Rendering Architecture in Frostbite
FrameGraph: Extensible Rendering Architecture in Frostbite
Electronic Arts / DICE
Docker1.13で変わったことをわからないなりにまとめてみた
Docker1.13で変わったことをわからないなりにまとめてみた
Kouta Asai
Loyalty Presentation - CM Forum April 15
Loyalty Presentation - CM Forum April 15
Ronan Gilhawley
Portadas nacionales 8 marzo-17
Portadas nacionales 8 marzo-17
Portadas Nacionales Think Mercadotecnia
MY JOB WENT TO VIETNAM?
MY JOB WENT TO VIETNAM?
Ryo Amano
Iba bangalore 2017 prospectus
Iba bangalore 2017 prospectus
ibabschool
Cuadro comparativo Corrientes Económicas
Cuadro comparativo Corrientes Económicas
Efren Alejandr Guzman Galindo
Frontera de Posibilidades de Producción
Frontera de Posibilidades de Producción
Efren Alejandr Guzman Galindo
HOST | SPEAKER | Leonardo (Leo) Meyer @leomeyer
HOST | SPEAKER | Leonardo (Leo) Meyer @leomeyer
Leonardo Meyer Z.
Internet of Things
Internet of Things
Mphasis
VoIP-Qualität im Netzwerk
VoIP-Qualität im Netzwerk
UCExpertTalk
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
alwei
Destaque
(20)
高度に最適化された移植可能なメモリマネージャ
高度に最適化された移植可能なメモリマネージャ
shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理
Heliumエンジンの設計と実装
Heliumエンジンの設計と実装
Component basedgameenginedesign
Component basedgameenginedesign
20130626 kawasaki.rb NKT77
20130626 kawasaki.rb NKT77
Design your 3d game engine
Design your 3d game engine
Doom3 commentary
Doom3 commentary
Vimを学びたい初心者のための5つの豆知識
Vimを学びたい初心者のための5つの豆知識
FrameGraph: Extensible Rendering Architecture in Frostbite
FrameGraph: Extensible Rendering Architecture in Frostbite
Docker1.13で変わったことをわからないなりにまとめてみた
Docker1.13で変わったことをわからないなりにまとめてみた
Loyalty Presentation - CM Forum April 15
Loyalty Presentation - CM Forum April 15
Portadas nacionales 8 marzo-17
Portadas nacionales 8 marzo-17
MY JOB WENT TO VIETNAM?
MY JOB WENT TO VIETNAM?
Iba bangalore 2017 prospectus
Iba bangalore 2017 prospectus
Cuadro comparativo Corrientes Económicas
Cuadro comparativo Corrientes Económicas
Frontera de Posibilidades de Producción
Frontera de Posibilidades de Producción
HOST | SPEAKER | Leonardo (Leo) Meyer @leomeyer
HOST | SPEAKER | Leonardo (Leo) Meyer @leomeyer
Internet of Things
Internet of Things
VoIP-Qualität im Netzwerk
VoIP-Qualität im Netzwerk
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
Semelhante a メモリアロケーションからみた拡張ライブラリに大切なこと
Rails5クイックスタート
Rails5クイックスタート
Hirata Tomoko
とある Perl Monger の働き方
とある Perl Monger の働き方
Yusuke Wada
Javaから見たRubyの世界
Javaから見たRubyの世界
Takafumi Yoshida
Rubyist started to learn Groovy - things important to leran new LL
Rubyist started to learn Groovy - things important to leran new LL
Uchio Kondo
困らない程度のJDK入門
困らない程度のJDK入門
Yohei Oda
RubyとRのおいしい関係
RubyとRのおいしい関係
sady_nitro
これからはじめるための JavaScript 開発環境
これからはじめるための JavaScript 開発環境
Ryo Higashigawa
Tokyurubykaigi05
Tokyurubykaigi05
yamanekko
MF GeeksNight pplogの話
MF GeeksNight pplogの話
Naoto Koshikawa
Mrubyについて 第16回 岡山ruby, ruby on rails勉強会
Mrubyについて 第16回 岡山ruby, ruby on rails勉強会
Masaya Konishi
Perlbeginnes 9 lt_ytnobody
Perlbeginnes 9 lt_ytnobody
azuma satoshi
gemの複数バージョンカジュアルテスト #shibuyarb
gemの複数バージョンカジュアルテスト #shibuyarb
Go Sueyoshi (a.k.a sue445)
なぜか技術書典5で 3サークルの運営をやってた話
なぜか技術書典5で 3サークルの運営をやってた話
ota42y
JavaScriptで出来る、あんなことこんなこと
JavaScriptで出来る、あんなことこんなこと
Mayu Kimura
地域Ruby会議に参加してきた話とか
地域Ruby会議に参加してきた話とか
Ken Muryoi
JRubyで作るapiサーバー
JRubyで作るapiサーバー
Yamamoto Kazuhisa
「RSpec初心者に送るRSpec最強チュートリアル」発表資料 #sg_study
「RSpec初心者に送るRSpec最強チュートリアル」発表資料 #sg_study
Junichi Ito
シャイなRubyistがRubyKaigiでできること
シャイなRubyistがRubyKaigiでできること
Narihiro Nakamura
Happy Life Hacking Ruby on Rails
Happy Life Hacking Ruby on Rails
Koichiro Ohba
20100619 wakhok important_of_io_with_jror
20100619 wakhok important_of_io_with_jror
Yoshiharu Hashimoto
Semelhante a メモリアロケーションからみた拡張ライブラリに大切なこと
(20)
Rails5クイックスタート
Rails5クイックスタート
とある Perl Monger の働き方
とある Perl Monger の働き方
Javaから見たRubyの世界
Javaから見たRubyの世界
Rubyist started to learn Groovy - things important to leran new LL
Rubyist started to learn Groovy - things important to leran new LL
困らない程度のJDK入門
困らない程度のJDK入門
RubyとRのおいしい関係
RubyとRのおいしい関係
これからはじめるための JavaScript 開発環境
これからはじめるための JavaScript 開発環境
Tokyurubykaigi05
Tokyurubykaigi05
MF GeeksNight pplogの話
MF GeeksNight pplogの話
Mrubyについて 第16回 岡山ruby, ruby on rails勉強会
Mrubyについて 第16回 岡山ruby, ruby on rails勉強会
Perlbeginnes 9 lt_ytnobody
Perlbeginnes 9 lt_ytnobody
gemの複数バージョンカジュアルテスト #shibuyarb
gemの複数バージョンカジュアルテスト #shibuyarb
なぜか技術書典5で 3サークルの運営をやってた話
なぜか技術書典5で 3サークルの運営をやってた話
JavaScriptで出来る、あんなことこんなこと
JavaScriptで出来る、あんなことこんなこと
地域Ruby会議に参加してきた話とか
地域Ruby会議に参加してきた話とか
JRubyで作るapiサーバー
JRubyで作るapiサーバー
「RSpec初心者に送るRSpec最強チュートリアル」発表資料 #sg_study
「RSpec初心者に送るRSpec最強チュートリアル」発表資料 #sg_study
シャイなRubyistがRubyKaigiでできること
シャイなRubyistがRubyKaigiでできること
Happy Life Hacking Ruby on Rails
Happy Life Hacking Ruby on Rails
20100619 wakhok important_of_io_with_jror
20100619 wakhok important_of_io_with_jror
Último
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
Shota Ito
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
sugiuralab
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
iPride Co., Ltd.
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
Atomu Hidaka
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
sugiuralab
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
danielhu54
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
osamut
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
iPride Co., Ltd.
Último
(8)
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
メモリアロケーションからみた拡張ライブラリに大切なこと
1.
メモリアロケーションからみた 拡張ライブラリに大切な こと または、Ruby内部構造の基礎知識 日本Rubyの会 etc. 樽家 昌也
2.
自己紹介 • 樽家 昌也
(MasayaTARUI) • twitter id: @taru • ircnet: tal_ • freenode: tarui • 平日はふつうに?サラリーマン。 • 年に1,2度、networkと無縁な生活を求めて旅に • 仕事で直接Rubyが対象になることは今のところない • Rubyを使い始めてから13年目ぐらい?
3.
これまで 1. Rubyを使い始める 2. よくわからない不具合はRubyレベルのWorkaroundで適当にごまかす 3.
メモリリークとかSEGVに泣かされる 4. 仕方がなく、Cコードに手を入れる 5. Rubyの独特な構成が面白くてCコードに手を入れる ← Now!!
4.
今日の対象者・・・ 『NKT77さん「Hadoop with Ruby-僕がPythonを選んだ理由」』 『初心者からコミッターまで、更にPythonistaやらC#erなど幅広い言語 経験を元に、日頃のふとした疑問や事例を紹介できたらとおもいま す。』 Σ(゚д゚;) どうやらawayらしい。。。 .rbなのに、おかしくね? (http://kawasakirb.doorkeeper.jpから引用)
5.
なに話そう… Rubyがよくわからない人にもわかるプレゼン =C言語コードについてのプレゼン。 これしかない
6.
メモリアロケーションからみた 拡張ライブラリに大切なこと アジェンダ • 拡張ライブラリ書き方復習 • Ruby
のGC • 拡張ライブラリ by C++ 準備不足によりキャンセル ホントウニスイマセン • おまけ:最近のGC事情
7.
拡張ライブラリ •RubyにC言語など他言語で書かれたプログラムを リンクさせて動かす仕組み •Rubyは拡張ライブラリが書きやすい言語と言われて いる [誰] •プロトタイピングをPure Rubyで行ってその後不満が あれば拡張ライブラリを書けばいいと思います!
8.
はじめての拡張ライブラリ 1. Cコードを用意する 2. ruby
–r mkmf –e ”create_makefile(’sample’)” 3. make 4. ruby –r ./sample –e”p JUST_CLASS” 5. 出来上がり
9.
サンプルライブラリAYB • 全ての基地を頂くライブラリ • AYBのオブジェクトのbelong_toメ ソッドに文字列を渡すと、その中 のbaseをXXXXと塗りつぶして最後 に”All
your base are belong to us”と のたまってくれます • C拡張ライブラリなのに中でsplitと かconcatとか呼んでますが今回は 気にしないでください・・・ • “base”で分割してforループ で”XXXX”つけて最後だけ特別な メッセージを付ける
10.
実行してみる を実行 めでたく全部の基地をいただけました。
11.
もっと基地がほしい error! これはrubyのbugですか? いいえ。拡張ライブラリのです。
12.
悪いところ RubyのGCってmark&sweep だから保守的でmark漏れな んて起こらないんじゃない の!? 大体この辺が悪くて、利用中のデータが Garbage Correct されてしまっている Arrayの中身を走査している最中に Arrayが消されてお亡くなりに。 ※こんな恣意的なコードになったのはなかなかチェックから漏れなかったから・・・
13.
ここで、あまり世間で聞かない話をひとつ • RubyのGCはRubyオブジェクトの先頭に対してしか調査をしない! • ArrayとかStringの大きな配列はGCで管理されていない領域に確保される。 (多分、もう当たり前すぎてだれも言及しない…のか?) Ruby Object ただ単に mallocで 確保され た領域 保護対象ここだけ RARRAY_PTR
14.
どうしてmark漏れが発生し、Rubyが落ちる のか Ruby Object ただ単に mallocで 確保され た領域 保護対象ここだけ RARRAY_PTR 1. RARRAY_PTRで配列の 先頭アドレスをもらう 2. もうこちらのアドレスは使わないので、 レジスタorスタックは再利用可能! 4.
このオブジェクトは使われてないと判断。 オブジェクトに関係するものを RARRAY_PTR先も含めて全部回収。 3. GC発生 5. RARRAY_PTR先の 内容が壊れる
15.
Why? Ruby Object normal • 単純に言えば効率のため Ruby Object Ruby Object Ruby Object normal normal normal normal norm al 小さい 固定長 heaps_slot 名前すらない? malloced
memory? こちらの領域の データが何を意味 するかはRubyObject が管理 こちらのアドレスに関係するデータだけを見ればいい 固定長なので簡単に枝切可能
16.
対処方法 Ruby Object ただ単に mallocで 確保され た領域 保護対象ここだけ RARRAY_PTR 1. RARRAY_PTRで配列の 先頭アドレスをもらう 2. もうこちらのアドレスは使わないので、 レジスタorスタックは再利用可能! 4.
このオブジェクトは使われてないと判断。 オブジェクトに関係するものを RARRAY_PTR先も含めて全部回収。 3. GC発生 5. RARRAY_PTR先の 内容が壊れる ちょっと 待った!!
17.
使っているよマークの挿入 RB_GC_GUARDを挿入することにより、そのオブジェクトを利用する事を コンパイラに通知 無事に基地をいただけた(忘れかけてたけど)
18.
RB_GC_GUARD() とは •そこに広がって いるのは黒魔術。 余人は決して手 を出してはいけ ない。。。 • 正直、何をしているのかよくわからない •
コンパイラに値をスタックに残しておくように出せる指示はない • いつコンパイラの最適化によって無効になるかわからない過酷な世界
19.
気をつけるべき点 • RubyのAPIにはいくつかchar *を引数にとるものがありますが… (rb_str_newやrb_reg_newなど) •
ふつうにあります • ただ、これに関してはRubyのAPI側で何とかすべきじゃないかと 思わなくもない。 malloced memoryに対して一部保護を入れるなど GC!ObjectAの中身 ObjectAの回収 Ruby Core ObjectAの中身を使おうとする 死亡!
20.
所で500000回廻さないと出てこないBugと か やってられない GC.stress = true 1回で十分に
21.
まとめ • 拡張ライブラリは簡単にかけるよ • たまには気をつけておかないと、GCで痛い目をみるよ •
でも、たまにだけだよ • RubyのGCは完全に保守的なわけではなくて、Ruby Objectが入ってる Heapsしかみないよ • RB_GC_GUARDは今の所、コンパイラの最適化とのおにごっこ • 拡張ライブラリを書いたら一度はGC.stress=1で走らせておこう • mallocで確保しているだけの領域にもなんらかの手当てがほしいなー • (最近もRuby本体で今回の例と同じバグがありました…) Rubyの書きやすさ+C言語のスピードの世界へようこそ!
22.
おまけ: 最近のGC事情 •がんがん 手が入ってます •Bitmap
marking すばらしい •RGenGC すばらしい
23.
hashベンチマーク(ソースは後) mark user system
total real 193p374 22.004 30.46 0.54 31 31.08143 200p195 17.09916 25.79 0.3 26.09 26.1964 r41094 14.4588 28.12 1.34 29.46 29.62575 r41095 12.13761 25.9 1.29 27.19 27.27527 r41097 7.250059 18.98 1.05 20.03 20.10459 r41128 6.633022 18.35 1.12 19.47 19.59778 r41325 1.272689 10.79 0.64 11.43 11.52074 r41634 0.870261 9.07 0.37 9.44 9.456588 0 5 10 15 20 25 30 35 193p374 200p195 r41094 r41095 r41097 r41128 r41325 r41634 mark user system total real 一部
24.
回数 r41634 Python
2.7.4 1000000 2.809293 1.559357 2000000 5.932282 3.421049 3000000 8.812863 5.801263 Pythonと適当に比較してみた(ソースは後) Oprofile 取ってみたところ、 支配的なのはst_lookupとsiphashが半々ぐらい
25.
ご静聴ありがとうございました
26.
hashベンチマーク ソース
27.
Pythonとの比較用ソース
Baixar agora