test/util_allocator.h

Tue, 04 Oct 2022 19:25:07 +0200

author
Mike Becker <universe@uap-core.de>
date
Tue, 04 Oct 2022 19:25:07 +0200
changeset 591
7df0bcaecffa
parent 571
f83583a0bbac
child 628
1e2be40f0cb5
permissions
-rw-r--r--

fix over-optimization of strstr

1. it's actually less performant to frequently read bytes
from an array instead of using the native word length
2. the SBO buffer should be local and not static to allow
multi-threading usage

universe@422 1 /*
universe@422 2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
universe@422 3 *
universe@422 4 * Copyright 2021 Mike Becker, Olaf Wintermann All rights reserved.
universe@422 5 *
universe@422 6 * Redistribution and use in source and binary forms, with or without
universe@422 7 * modification, are permitted provided that the following conditions are met:
universe@422 8 *
universe@422 9 * 1. Redistributions of source code must retain the above copyright
universe@422 10 * notice, this list of conditions and the following disclaimer.
universe@422 11 *
universe@422 12 * 2. Redistributions in binary form must reproduce the above copyright
universe@422 13 * notice, this list of conditions and the following disclaimer in the
universe@422 14 * documentation and/or other materials provided with the distribution.
universe@422 15 *
universe@422 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
universe@422 17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
universe@422 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
universe@422 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
universe@422 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
universe@422 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
universe@422 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
universe@422 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
universe@422 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
universe@422 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
universe@422 26 * POSSIBILITY OF SUCH DAMAGE.
universe@422 27 */
universe@422 28
universe@422 29 #ifndef UCX_UTIL_ALLOCATOR_H
universe@422 30 #define UCX_UTIL_ALLOCATOR_H
universe@422 31
universe@422 32 #include "cx/allocator.h"
universe@422 33
universe@518 34 #include <set>
universe@422 35
universe@518 36 struct CxTestingAllocator : public CxAllocator {
universe@422 37 /**
universe@422 38 * Total number of all allocations (malloc, calloc, realloc).
universe@422 39 * A realloc() does only count when the memory has to be moved.
universe@422 40 */
universe@518 41 unsigned alloc_total = 0;
universe@422 42 /**
universe@422 43 * Number of failed allocations (malloc, calloc, realloc).
universe@422 44 */
universe@518 45 unsigned alloc_failed = 0;
universe@422 46 /**
universe@422 47 * Total number of freed pointers.
universe@422 48 * A reallocation also counts as a free when the memory has to be moved.
universe@422 49 */
universe@518 50 unsigned free_total = 0;
universe@422 51 /**
universe@422 52 * Number of failed free invocations.
universe@422 53 * A free() is considered failed, if it has not been performed on tracked memory.
universe@422 54 */
universe@518 55 unsigned free_failed = 0;
universe@422 56 /**
universe@518 57 * The set of tracked memory blocks.
universe@422 58 */
universe@518 59 std::set<void *> tracked;
universe@518 60
universe@422 61 /**
universe@518 62 * Constructs a new testing allocator.
universe@422 63 */
universe@518 64 CxTestingAllocator();
universe@422 65
universe@518 66 /**
universe@571 67 * Verifies that this allocator has been used.
universe@571 68 *
universe@571 69 * @return true if any allocation was attempted using this allocator
universe@571 70 */
universe@571 71 [[nodiscard]] bool used() const;
universe@571 72
universe@571 73 /**
universe@518 74 * Verifies that all allocated memory blocks are freed and no free occurred twice.
universe@518 75 *
universe@518 76 * @return true iff all tracked allocations / deallocations were valid
universe@518 77 */
universe@571 78 [[nodiscard]] bool verify() const;
universe@518 79 };
universe@422 80
universe@422 81 #endif /* UCX_UTIL_ALLOCATOR_H */

mercurial