All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nicholas Miell <nmiell@comcast.net>
To: "J.A. Magallón" <jamagallon@ono.com>
Cc: "Loïc Grenié" <loic.grenie@gmail.com>,
	Ben.Crowhurst@stellatravel.co.uk, linux-kernel@vger.kernel.org
Subject: Re: Kernel Development & Objective-C
Date: Fri, 30 Nov 2007 15:53:38 -0800	[thread overview]
Message-ID: <1196466818.18231.40.camel@entropy> (raw)
In-Reply-To: <20071201001950.11100a32@werewolf>


On Sat, 2007-12-01 at 00:19 +0100, J.A. Magallón wrote:

> An vtable in C++ takes exactly the same space that the function
> table pointer present in every driver nowadays... and probably
> the virtual method call that C++ does itself with
> 
> 	thing->do_something(with,this)
> 
> like
> 	push thing
> 	push with
> 	push this
> 	call THING_vtable+indexof(do_something) // constants at compile time
> 
> is much more efficient that what gcc can mangle to do with
> 
> 	thing->do_something(with,this,thing)
> 
> 	push with
> 	push this
> 	push thing
> 	get thing+offsetof(do_something) // not constant at compile time
> 	dereference it
> 	call it
> 
> (that is, get a generic field on a structure and use it as jump address)
> 
> In short, the kernel is object oriented, implements OO programming by
> hand, but the compiler lacks the knowledge that it is object oriented
> programming so it could do some optimizations.

        struct test;
        struct testVtbl
        {
        	int (*fn1)(struct test *t, int x, int y);
        	int (*fn2)(struct test *t, int x, int y);
        };
        struct test
        {
        	struct testVtbl *vtbl;
        	int x, y;
        };
        void testCall(struct test *t, int x, int y)
        {
        	t->vtbl->fn1(t, x, y);
        	t->vtbl->fn2(t, x, y);
        }

and

        struct test
        {
        	virtual int fn1(int x, int y);
        	virtual int fn2(int x, int y);
        
        	int x, y;
        };
        
        void testCall(struct test *t, int x, int y)
        {
        	t->fn1(x, y);
        	t->fn2(x, y);
        }
        
generate instruction-for-instruction identical code.

-- 
Nicholas Miell <nmiell@comcast.net>


  reply	other threads:[~2007-12-01  0:00 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-11-29 12:14 Kernel Development & Objective-C Ben Crowhurst
2007-11-30 10:02 ` Xavier Bestel
2007-11-30 10:09   ` KOSAKI Motohiro
2007-11-30 10:20     ` Xavier Bestel
2007-11-30 10:54       ` Jan Engelhardt
2007-11-30 14:21         ` David Newall
2007-11-30 23:31           ` Bill Davidsen
2007-11-30 23:40             ` Alan Cox
2007-12-01  0:05               ` Arnaldo Carvalho de Melo
2007-12-01 18:27               ` Bill Davidsen
2007-12-01 18:18                 ` Alan Cox
2007-12-03  1:23                   ` Bill Davidsen
2007-11-30 22:52     ` J.A. Magallón
2007-11-30 10:29 ` Loïc Grenié
2007-11-30 11:16   ` Ben Crowhurst
2007-11-30 11:36     ` Karol Swietlicki
2007-11-30 14:37     ` Lennart Sorensen
2007-12-08  8:54     ` Rogelio M. Serrano Jr.
2007-11-30 23:19   ` J.A. Magallón
2007-11-30 23:53     ` Nicholas Miell [this message]
2007-12-01  0:31     ` Al Viro
2007-12-01  0:34       ` Al Viro
2007-12-01  1:09       ` J.A. Magallón
2007-12-01 19:55       ` Avi Kivity
2007-12-04 17:54     ` Lennart Sorensen
2007-12-04 21:10       ` Avi Kivity
2007-12-04 21:24       ` J.A. Magallón
2007-11-30 11:37 ` Matti Aarnio
2007-11-30 14:34 ` Lennart Sorensen
2007-11-30 15:26   ` Kyle Moffett
2007-11-30 18:40     ` H. Peter Anvin
2007-11-30 19:35       ` Kyle Moffett
2007-12-01 20:03     ` Avi Kivity
2007-12-02 19:01       ` Andi Kleen
2007-12-03  5:12         ` Avi Kivity
2007-12-03  9:50           ` Andi Kleen
2007-12-03 11:46             ` Avi Kivity
2007-12-03 11:50               ` Andi Kleen
2007-12-03 21:13               ` Willy Tarreau
2007-12-03 21:39                 ` J.A. Magallón
2007-12-03 21:57                   ` Alan Cox
2007-12-04 21:47                     ` J.A. Magallón
2007-12-04 22:20                       ` Diego Calleja
2007-12-05 10:59                         ` Giacomo A. Catenazzi
2007-12-04 21:07                 ` Avi Kivity
2007-12-04 22:43                   ` Willy Tarreau
2007-12-05 17:05                     ` Micro vs macro optimizations (was: Re: Kernel Development & Objective-C) Avi Kivity
2007-12-03 12:35           ` Kernel Development & Objective-C Gilboa Davara
2007-12-03 12:44             ` Gilboa Davara
2007-12-03 16:28             ` Casey Schaufler
2007-12-04 17:50             ` Lennart Sorensen
2007-12-05 10:31               ` Gilboa Davara
2007-12-01 19:59   ` Avi Kivity
2007-12-02 19:44     ` Jörn Engel
2007-12-03 16:53     ` Lennart Sorensen
2007-11-30 15:00 ` Chris Snook
2007-12-01  9:50   ` David Newall

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1196466818.18231.40.camel@entropy \
    --to=nmiell@comcast.net \
    --cc=Ben.Crowhurst@stellatravel.co.uk \
    --cc=jamagallon@ono.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=loic.grenie@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.