Skip to content

Instantly share code, notes, and snippets.

@vaiorabbit
Created February 11, 2014 03:30
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/8928834 to your computer and use it in GitHub Desktop.
Save vaiorabbit/8928834 to your computer and use it in GitHub Desktop.
Fiddle 実験 : 文字列は2個しかないが関数呼び出しで参照された8回分のFiddle::Pointerが生成されている(どこかで作られたNULL相当の1個は除く)。インスタンス8個に対してptrは2種類しかない点に注目
require 'fiddle/import'
module M
extend Fiddle::Importer
dlload "/usr/lib/libstdc++.dylib"
extern "int strcmp(char*, char*)"
extern "int strlen(char*)"
end
str0 = "abc"
str1 = "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:0x00000100e2d080 ptr=0x0000010191fef0 size=3 free=0x00000000000000>
#<Fiddle::Pointer:0x00000100e2bdd0 ptr=0x0000010191ff68 size=3 free=0x00000000000000>
#<Fiddle::Pointer:0x00000100e27540 ptr=0x0000010191ff68 size=3 free=0x00000000000000>
#<Fiddle::Pointer:0x00000100e250a0 ptr=0x0000010191fef0 size=3 free=0x00000000000000>
#<Fiddle::Pointer:0x00000100e26ca0 ptr=0x0000010191fef0 size=3 free=0x00000000000000>
#<Fiddle::Pointer:0x00000100e26be0 ptr=0x0000010191ff68 size=3 free=0x00000000000000>
#<Fiddle::Pointer:0x00000100e25b30 ptr=0x0000010191ff68 size=3 free=0x00000000000000>
#<Fiddle::Pointer:0x00000100e24810 ptr=0x0000010191ff68 size=3 free=0x00000000000000>
#<Fiddle::Pointer:0x00000100ebeaf0 ptr=0x00000000000000 size=0 free=0x00000000000000>
=end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment