[
https://issues.apache.org/jira/browse/AXIS2C-254?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Samisa Abeysinghe updated AXIS2C-254:
-------------------------------------
Fix Version/s: 1.0.0
> ops structs should be statically-allocated and shared
> -----------------------------------------------------
>
> Key: AXIS2C-254
> URL: https://issues.apache.org/jira/browse/AXIS2C-254
> Project: Axis2-C
> Issue Type: Improvement
> Affects Versions: Current (Nightly)
> Reporter: Samisa Abeysinghe
> Fix For: 1.0.0
>
>
> At the moment, when objects have an ops field pointing to an *_ops
> struct with function pointers, you are dynamically allocating a separate
> copy of the ops struct for each instance of the class. The whole point
> of factoring out the function pointers into a separate ops struct is so
> that a single statically-allocated ops struct can be shared between all
> instances of a given class.
> Thus the pattern is supposed to be something like this:
> /* bar.h */
> typedef struct bar bar_t;
> typedef struct bar_ops {
> void destroy(bar_t *);
> void x(bar_t *);
> } bar_ops_t;
> struct bar {
> const bar_ops_t *ops;
> };
> #define BAR_X(b) ((f)->ops->x(b))
> bar_t *bar1_create();
> bar_t *bar2_create();
> /* bar1.c */
> typedef struct bar1 {
> bar_t base;
> int some_private_data;
> } bar1_t;
> static void destroy1(bar_t *);
> static void x1(bar_t *);
> static const bar_ops_t bar1_ops = {
> destroy1,
> x1
> };
> bar_t *bar1_create()
> {
> bar1_t *b1 = malloc(sizeof(bar1_t));
> b1->ops = &bar1_ops;
> b1->some_private_date = 42;
> return &b1->base;
> }
> static
> void destroy1(bar_t *bar)
> {
> free(bar)
> }
> Points to note:
> - the ops member of struct bar is a const pointer
> - bar1_ops is both static and const
> - the method implementations like x1 are all declared static (although
> the x1 function will be called from outside bar1.c, it is only called
> via the function pointer, so its name does not need to be exported)
> - the create/destroy methods do a single allocation/deallocation
> Fixing this will cut the number of allocations that you do in half!
> (based on comments by James)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]