gpt4 book ai didi

c - 带有对齐堆栈缓冲区的 O_DIRECT IO 问题

转载 作者:太空宇宙 更新时间:2023-11-04 00:09:40 28 4
gpt4 key购买 nike

以下代码在缓冲区在堆栈上时失败,但在堆上分配时成功。我使用 Raid 驱动器在 RHEL 5.3 上对其进行了测试。是否可以将 O_DIRECT 与堆栈缓冲区一起使用?

#define _GNU_SOURCE
#include <stdio.h>
#include <assert.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <errno.h>
#include <sys/mman.h>
#include <malloc.h>


#define K 1024
#define ALIGNMENT (4*K)
#define RDSIZE (16*K)
#define BLOCKSIZE (512*K)

int main()
{
int flags = O_RDONLY | O_LARGEFILE;
int n = 0;
int fd = 0;
char* buf = (char *) memalign(ALIGNMENT, BLOCKSIZE);
//char buf[BLOCKSIZE] __attribute__((__aligned__(ALIGNMENT)));

assert(((long)buf) % ALIGNMENT == 0);

fd = open("test", flags | O_DIRECT);
if (fd < 0) {
perror("file open");
return -1;
}


n = read(fd, buf, RDSIZE);

if (n < 0) {
perror("file read");
return -1;
}

printf("%d\n", n);

close(fd);

}

更新:使用 Intel CC 编译时相同的代码成功。

最佳答案

检查你的堆栈大小 512K 是相当多的。

关于c - 带有对齐堆栈缓冲区的 O_DIRECT IO 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6238277/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com