scratch: save a couple bytes of unnecessarily-allocated memory

This commit is contained in:
Andrew Poelstra 2019-03-15 15:41:09 +00:00
parent a7a164f2c6
commit 7623cf2b97
2 changed files with 4 additions and 4 deletions

View File

@ -45,10 +45,10 @@ static size_t secp256k1_scratch_max_allocation(const secp256k1_callback* error_c
for (i = 0; i < scratch->frame; i++) { for (i = 0; i < scratch->frame; i++) {
allocated += scratch->frame_size[i]; allocated += scratch->frame_size[i];
} }
if (scratch->max_size - allocated <= objects * ALIGNMENT) { if (scratch->max_size - allocated <= objects * (ALIGNMENT - 1)) {
return 0; return 0;
} }
return scratch->max_size - allocated - objects * ALIGNMENT; return scratch->max_size - allocated - objects * (ALIGNMENT - 1);
} }
static int secp256k1_scratch_allocate_frame(const secp256k1_callback* error_callback, secp256k1_scratch* scratch, size_t n, size_t objects) { static int secp256k1_scratch_allocate_frame(const secp256k1_callback* error_callback, secp256k1_scratch* scratch, size_t n, size_t objects) {
@ -60,7 +60,7 @@ static int secp256k1_scratch_allocate_frame(const secp256k1_callback* error_call
} }
if (n <= secp256k1_scratch_max_allocation(error_callback, scratch, objects)) { if (n <= secp256k1_scratch_max_allocation(error_callback, scratch, objects)) {
n += objects * ALIGNMENT; n += objects * (ALIGNMENT - 1);
scratch->current_frame = scratch->data; scratch->current_frame = scratch->data;
scratch->data = (void *) ((char *) scratch->data + n); scratch->data = (void *) ((char *) scratch->data + n);
scratch->frame_size[scratch->frame] = n; scratch->frame_size[scratch->frame] = n;

View File

@ -356,7 +356,7 @@ void run_scratch_tests(void) {
/* ...but pushing a new stack frame does affect the max allocation */ /* ...but pushing a new stack frame does affect the max allocation */
CHECK(secp256k1_scratch_allocate_frame(&none->error_callback, scratch, 500, 1) == 1); CHECK(secp256k1_scratch_allocate_frame(&none->error_callback, scratch, 500, 1) == 1);
CHECK(secp256k1_scratch_max_allocation(&none->error_callback, scratch, 1) < 500); /* 500 - ALIGNMENT */ CHECK(secp256k1_scratch_max_allocation(&none->error_callback, scratch, 1) < 500); /* 500 - (ALIGNMENT - 1) */
CHECK(secp256k1_scratch_alloc(&none->error_callback, scratch, 500) != NULL); CHECK(secp256k1_scratch_alloc(&none->error_callback, scratch, 500) != NULL);
CHECK(secp256k1_scratch_alloc(&none->error_callback, scratch, 500) == NULL); CHECK(secp256k1_scratch_alloc(&none->error_callback, scratch, 500) == NULL);