小编Kik*_*dez的帖子

在LLVM IR中限制C vs noalias属性中的限定符

我的问题与C 语言中限制限定符的不同语义和LLVM中的noalias属性有关,当它们用作函数参数时.

根据noordiasLLVM文档:

这表示在执行函数期间,通过不基于参数或返回值的指针值,也不会访问基于参数或返回值通过指针值访问的对象.

限制限定符的情况下,C11的草案(例3,第124页,第6.7.3.1节)给出了两个限制参数之间存在别名的示例,只要它们只读取数据就可以了:

void h(int n, int * restrict p, int * restrict q, int * restrict r) {
    int i;
    for (i = 0; i < n; i++)
        p[i] = q[i] + r[i];
}
Run Code Online (Sandbox Code Playgroud)

对我来说,似乎上面给出的例子不能满足noalias的语义.是这样的吗?

c c++ llvm-ir

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

如何使用管道获取惰性 ByteString 并将其写入文件(在常量内存中)

我正在使用 amazonka 流式传输 S3 文件的下载,并使用该sinkBody功能继续流式传输。目前,我下载的文件如下:

getFile bucketName fileName = do
    resp <- send (getObject (BucketName bucketName) fileName)
    sinkBody (resp ^. gorsBody) sinkLazy
Run Code Online (Sandbox Code Playgroud)

在哪里sinkBody :: MonadIO m => RsBody -> ConduitM ByteString Void (ResourceT IO) a -> m a。为了在恒定内存中运行,我认为这sinkLazy是从管道流中获取值的一个不错的选择。

之后,我想将数据的惰性字节串(S3 文件)保存到本地文件中,为此我使用以下代码:

-- fetch stream of data from S3
bytestream <- liftIO $ AWS.runResourceT $ runAwsT awsEnv $ getFile serviceBucket key

-- create a file
liftIO $ writeFile filePath  ""

-- write content of stream into …
Run Code Online (Sandbox Code Playgroud)

haskell lazy-evaluation conduit

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

标签 统计

c ×1

c++ ×1

conduit ×1

haskell ×1

lazy-evaluation ×1

llvm-ir ×1