Мне нужно изменить код Mac, чтобы он работал на Windows или, по крайней мере, собирался на данный момент, но, похоже, проблема с valloc.
В нем говорится: error C3861: 'valloc': identifier not found.
Вот как это используется:
#ifndef _XOPEN_SOURCE_EXTENDED 1
#define _XOPEN_SOURCE_EXTENDED 1
#endif
#include <stdlib.h>
#include <queue>
#include "ArrayArithmetic.h"
#include "MessageObject.h"
#if __SSE__
// allocate memory aligned to 16-bytes memory boundary
#define ALLOC_ALIGNED_BUFFER(_numBytes) (float *) _mm_malloc(_numBytes, 16)
#define FREE_ALIGNED_BUFFER(_buffer) _mm_free(_buffer)
#else
// NOTE(mhroth): valloc seems to work well, but is deprecated!
#define ALLOC_ALIGNED_BUFFER(_numBytes) (float *) valloc(_numBytes)
#define FREE_ALIGNED_BUFFER(_buffer) free(_buffer)
#endif
У меня есть хороший вариант, или, по крайней мере, я так думаю. Нет, я действительно не понимаю, откуда это происходит, valloc
доступен в Windows?
Я работаю над Windows 8.1 с Visual Studio 2010.
Если Windows обнаружена, используйте функции _aligned_malloc
/_aligned_free
.
#ifdef _WIN32
#define ALLOC_ALIGNED_BUFFER(_numBytes) ((float *)_aligned_malloc (_numBytes, 16))
#define FREE_ALIGNED_BUFFER(_buffer) _aligned_free(_buffer)
#elif __SSE__
// allocate memory aligned to 16-bytes memory boundary
#define ALLOC_ALIGNED_BUFFER(_numBytes) (float *) _mm_malloc(_numBytes, 16)
#define FREE_ALIGNED_BUFFER(_buffer) _mm_free(_buffer)
#else
// NOTE(mhroth): valloc seems to work well, but is deprecated!
#define ALLOC_ALIGNED_BUFFER(_numBytes) (float *) valloc(_numBytes)
#define FREE_ALIGNED_BUFFER(_buffer) free(_buffer)
#endif
<queue>
.valloc()
выделяет размер байтов памяти и возвращает указатель на выделенную память. Выделенная память выравнивается по границе страницы». (источник) . Если выравнивание страницы важно в этом коде (и кто знает?), Вам придется написать замену.