Frage im Vorstellungsgespräch bei NVIDIA

implement the memalign() function

Antwort im Vorstellungsgespräch

Anonym

8. Juni 2012

#include #include void* memalign(unsigned int blocksize,unsigned int bytes) { unsigned char* malloced; unsigned int to_add; if ( ( blocksize & (blocksize - 1) ) || bytes < 1 ) return NULL; malloced = (unsigned char*)malloc(bytes + blocksize); if (!malloced) return NULL; /* to_add = blocksize - ((unsigned int)malloced) % blocksize; */ to_add = blocksize - (unsigned int)malloced & (blocksize - 1); malloced = malloced + to_add; *(malloced - 1) = to_add; return (void*)malloced; } void memfree(void* mem) { unsigned char* p = (unsigned char*) mem; p -= *(p - 1); free(p); } int main(int argc , char* argv[]){ void *p = memalign(atoi(argv[1]), atoi(argv[2])); memfree(p); free(NULL); }