1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "base/memory/aligned_memory.h"
7 #include "base/logging.h"
9 #if defined(OS_ANDROID)
15 void* AlignedAlloc(size_t size
, size_t alignment
) {
17 DCHECK_EQ(alignment
& (alignment
- 1), 0U);
18 DCHECK_EQ(alignment
% sizeof(void*), 0U);
20 #if defined(COMPILER_MSVC)
21 ptr
= _aligned_malloc(size
, alignment
);
22 // Android technically supports posix_memalign(), but does not expose it in
23 // the current version of the library headers used by Chrome. Luckily,
24 // memalign() on Android returns pointers which can safely be used with
25 // free(), so we can use it instead. Issue filed to document this:
26 // http://code.google.com/p/android/issues/detail?id=35391
27 #elif defined(OS_ANDROID)
28 ptr
= memalign(alignment
, size
);
30 if (posix_memalign(&ptr
, alignment
, size
))
33 // Since aligned allocations may fail for non-memory related reasons, force a
34 // crash if we encounter a failed allocation; maintaining consistent behavior
35 // with a normal allocation failure in Chrome.
37 DLOG(ERROR
) << "If you crashed here, your aligned allocation is incorrect: "
38 << "size=" << size
<< ", alignment=" << alignment
;
41 // Sanity check alignment just to be safe.
42 DCHECK_EQ(reinterpret_cast<uintptr_t>(ptr
) & (alignment
- 1), 0U);