ast: pack the ParseCommon struct
This shows a measurable improvement in memory and performance for free, on 64bit at least. Packing is (or should be) safe in this case. Signed-off-by: Ran Benita <ran234@gmail.com>master
parent
9a3c115be0
commit
1e6e5669c6
|
@ -206,4 +206,10 @@ unmap_file(const char *str, size_t size);
|
||||||
# define ATTR_NULL_SENTINEL
|
# define ATTR_NULL_SENTINEL
|
||||||
#endif /* GNUC >= 4 */
|
#endif /* GNUC >= 4 */
|
||||||
|
|
||||||
|
#if (defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 295)
|
||||||
|
#define ATTR_PACKED __attribute__((__packed__))
|
||||||
|
#else
|
||||||
|
#define ATTR_PACKED
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* UTILS_H */
|
#endif /* UTILS_H */
|
||||||
|
|
|
@ -143,9 +143,11 @@ expr_op_type_to_string(enum expr_op_type type);
|
||||||
const char *
|
const char *
|
||||||
expr_value_type_to_string(enum expr_value_type type);
|
expr_value_type_to_string(enum expr_value_type type);
|
||||||
|
|
||||||
typedef struct _ParseCommon {
|
/* This struct contains fields common to all other AST nodes. It is only
|
||||||
enum stmt_type type;
|
* ever embedded in other structs, so save some memory by packing it. */
|
||||||
|
typedef struct ATTR_PACKED _ParseCommon {
|
||||||
struct _ParseCommon *next;
|
struct _ParseCommon *next;
|
||||||
|
enum stmt_type type;
|
||||||
} ParseCommon;
|
} ParseCommon;
|
||||||
|
|
||||||
typedef struct _IncludeStmt {
|
typedef struct _IncludeStmt {
|
||||||
|
|
Loading…
Reference in New Issue