我的问题与C 语言中限制限定符的不同语义和LLVM中的noalias属性有关,当它们用作函数参数时.
这表示在执行函数期间,通过不基于参数或返回值的指针值,也不会访问基于参数或返回值通过指针值访问的对象.
在限制限定符的情况下,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的语义.是这样的吗?
我正在使用 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)