Skip to content

Instantly share code, notes, and snippets.

@vaiorabbit
Created February 11, 2014 03:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vaiorabbit/8928861 to your computer and use it in GitHub Desktop.
Save vaiorabbit/8928861 to your computer and use it in GitHub Desktop.
Fiddle 実験 : 一方同じ内容の文字列から作ったFiddle::Pointerインスタンスを引数として渡せば無駄な生成は起きない(どこかで作られたNULL相当の1個は除く)
require 'fiddle/import'
module M
extend Fiddle::Importer
dlload "/usr/lib/libstdc++.dylib"
extern "int strcmp(char*, char*)"
extern "int strlen(char*)"
end
=begin
str0 = "abc"
str1 = "abd"
=end
str0 = Fiddle::Pointer["abc"]
str1 = Fiddle::Pointer["abd"]
p M.strcmp(str0, str0) # => 0
p M.strcmp(str0, str1) # => -1
p M.strcmp(str1, str0) # => 1
p M.strlen(str0) # => 3
p M.strlen(str1) # => 3
ObjectSpace.each_object(Fiddle::Pointer) {|x| p x }
# =>
=begin
#<Fiddle::Pointer:0x00000100ec6bb0 ptr=0x00000000000000 size=0 free=0x00000000000000>
#<Fiddle::Pointer:0x00000100e4be00 ptr=0x0000010191f928 size=3 free=0x00000000000000>
#<Fiddle::Pointer:0x00000100e4bfd0 ptr=0x0000010191f978 size=3 free=0x00000000000000>
=end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment