相关疑难解决方法(0)

如何仅使用标准库分配对齐的内存?

我刚刚完成了一项测试,作为求职面试的一部分,一个问题让我感到难过 - 甚至使用谷歌作为参考.我想看看stackoverflow工作人员可以用它做什么:

"memset_16aligned"函数需要传递给它的16byte对齐指针,否则它将崩溃.

a)如何分配1024字节的内存,并将其与16字节边界对齐?
b)执行memset_16aligned后释放内存.

{    
   void *mem;
   void *ptr;

   // answer a) here

   memset_16aligned(ptr, 0, 1024);

   // answer b) here    
}
Run Code Online (Sandbox Code Playgroud)

c memory-management

404
推荐指数
9
解决办法
17万
查看次数

在GCC中对齐malloc()?

GCC或glibc中是否有任何标准化函数在对齐指针处分配内存块?像MSVC中的_align_malloc()一样?

c malloc gcc

36
推荐指数
5
解决办法
7万
查看次数

现代处理器上的内存对齐?

我经常看到如下代码,例如,在内存中表示一个大位图:

size_t width = 1280;
size_t height = 800;
size_t bytesPerPixel = 3;
size_t bytewidth = ((width * bytesPerPixel) + 3) & ~3; /* Aligned to 4 bytes */
uint8_t *pixelData = malloc(bytewidth * height);
Run Code Online (Sandbox Code Playgroud)

(也就是说,一个位图被分配为一个连续的内存块,它bytewidth与一定数量的字节对齐,最常见的是4.)

然后通过以下方式给出图像上的一个点:

pixelData + (bytewidth * y) + (bytesPerPixel * x)
Run Code Online (Sandbox Code Playgroud)

这引出了两个问题:

  1. 对齐像这样的缓冲区会对现代处理器产生性能影响吗?我应该担心对齐,还是编译器会处理这个问题?
  2. 如果它确实有影响,有人可以指向我找到各种处理器的理想字节对齐的资源吗?

谢谢.

c memory performance memory-management alignment

12
推荐指数
2
解决办法
6064
查看次数

C 中损坏的大小与 prev_size

每当我在线程中分配动态内存时,都会出现“大小损坏与 prev_size”错误。每当我在 main() 中分配内存时,它都可以正常工作。但是在线程中分配动态内存会产生错误。

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

void *fib(void *p);
struct mystruct
{
    int *array;
    int size;
};

int main(int argc, char *argv[])
{
    pthread_t tid;
    pthread_attr_t attr;
    pthread_attr_init(&attr);
    struct mystruct obj;

    obj.size = atoi(argv[1]);;

    pthread_create(&tid, &attr, fib, (void *)&obj);
    pthread_join(tid, NULL);
}

void *fib (void *p)
{
    struct mystruct *x = (struct mystruct *)p;
    x->array = (int *) malloc (x->size);

    for (int i=0; i<x->size; i++){
        x->array[i] = i;
        printf("The array is = %d\n", x->array[i]);
    }   
} …
Run Code Online (Sandbox Code Playgroud)

c pthreads dynamic-memory-allocation

1
推荐指数
1
解决办法
1万
查看次数