diff options
author | Björn-Egil Dahlberg <[email protected]> | 2017-02-27 15:27:05 +0100 |
---|---|---|
committer | Björn-Egil Dahlberg <[email protected]> | 2017-02-28 15:55:25 +0100 |
commit | 4bbbf4ff9b3fe4be24bf8d57780c84d5b3ca0f77 (patch) | |
tree | 2c2ceb87baf72f5fcdf0bb5e9b267aabaabf0aed /erts/emulator/beam/erl_binary.h | |
parent | 3202e753383d495bce8008721e94428788d4f400 (diff) | |
download | otp-4bbbf4ff9b3fe4be24bf8d57780c84d5b3ca0f77.tar.gz otp-4bbbf4ff9b3fe4be24bf8d57780c84d5b3ca0f77.tar.bz2 otp-4bbbf4ff9b3fe4be24bf8d57780c84d5b3ca0f77.zip |
erts: Convert small sub-binaries to heap-binaries
In many cases sub-binaries costs more memory than converting them to heap-binaries.
Sub-binaries also has a hidden cost of pinning larger binaries in memory.
By converting binaries this cost is reduced.
Byte aligned sub-binaries upto 24 bytes (64-bit) or 12 bytes (32-bit) are converted.
Diffstat (limited to 'erts/emulator/beam/erl_binary.h')
-rw-r--r-- | erts/emulator/beam/erl_binary.h | 18 |
1 files changed, 1 insertions, 17 deletions
diff --git a/erts/emulator/beam/erl_binary.h b/erts/emulator/beam/erl_binary.h index 946d3cfe03..6ff71ec6d1 100644 --- a/erts/emulator/beam/erl_binary.h +++ b/erts/emulator/beam/erl_binary.h @@ -156,6 +156,7 @@ typedef union { #include "erl_threads.h" #include "bif.h" #include "erl_bif_unique.h" +#include "erl_bits.h" /* * Maximum number of bytes to place in a heap binary. @@ -163,23 +164,6 @@ typedef union { #define ERL_ONHEAP_BIN_LIMIT 64 -/* - * This structure represents a SUB_BINARY. - * - * Note: The last field (orig) is not counted in arityval in the header. - * This simplifies garbage collection. - */ - -typedef struct erl_sub_bin { - Eterm thing_word; /* Subtag SUB_BINARY_SUBTAG. */ - Uint size; /* Binary size in bytes. */ - Uint offs; /* Offset into original binary. */ - byte bitsize; - byte bitoffs; - byte is_writable; /* The underlying binary is writable */ - Eterm orig; /* Original binary (REFC or HEAP binary). */ -} ErlSubBin; - #define ERL_SUB_BIN_SIZE (sizeof(ErlSubBin)/sizeof(Eterm)) #define HEADER_SUB_BIN _make_header(ERL_SUB_BIN_SIZE-2,_TAG_HEADER_SUB_BIN) |