小编fir*_*iku的帖子

sprintf/snprintf是否分配了额外的内存?

我正在编写一个库,并希望使它绝对与资源无关,这也意味着库应该使用用户提供的内存分配功能.库允许用户也设置自己的错误处理函数,这些函数以错误消息作为参数调用,如下所示:

typedef void (*error_handler)(const char* msg);
Run Code Online (Sandbox Code Playgroud)

库代码自己准备错误消息,就像那样(消息格式化失败的情况):

char buf[BUF_SIZE];
snprintf(buf, BUF_SIZE, "Oops found at file '%s' line %d", __FILE__, __LINE__);
Run Code Online (Sandbox Code Playgroud)

但是我可以确定snprintf不会为malloc的内部使用分配更多内存,显然会绕过用户提供的分配例程吗?我的Linux系统中的手册页对此保持沉默.

c memory-management stdio

9
推荐指数
2
解决办法
7042
查看次数

私有数据构造函数上的模式匹配

我正在为网格轴编写一个简单的ADT.在我的应用程序中,网格可以是常规的(在坐标之间有恒定的步长),也可以是不规则的(否则).当然,常规网格只是不规则网格的一种特殊情况,但在某些情况下可能需要区分它们(例如,执行一些优化).所以,我声明我的ADT如下:

data GridAxis = RegularAxis (Float, Float) Float -- (min, max) delta
              | IrregularAxis [Float]            -- [xs]
Run Code Online (Sandbox Code Playgroud)

但我不希望用户使用max < min或使用无序xs列表创建格式错误的轴.因此,我添加了"更智能"的构造函数,它们执行一些基本检查:

regularAxis :: (Float, Float) -> Float -> GridAxis
regularAxis (a, b) dx = RegularAxis (min a b, max a b) (abs dx)

irregularAxis :: [Float] -> GridAxis
irregularAxis xs = IrregularAxis (sort xs)
Run Code Online (Sandbox Code Playgroud)

我不希望用户直接创建网格,因此我不会将GridAxis数据构造函数添加到模块导出列表中:

module GridAxis (
    GridAxis,
    regularAxis,
    irregularAxis,
    ) where
Run Code Online (Sandbox Code Playgroud)

但事实证明,完成此操作后,我再也无法使用模式匹配GridAxis了.试着用它

import qualified GridAxis as GA

test :: …
Run Code Online (Sandbox Code Playgroud)

haskell algebraic-data-types pattern-synonyms

7
推荐指数
2
解决办法
339
查看次数

可以是CLR令牌为零或负

一些.NET反射方法(例如,Module.ResolveField)接受所谓的标记作为参数.这些令牌只是Int32号码.我在反汇编程序中只看到了正数令牌,但一般来说,整数也可以是负数或零.假设CLR令牌只是正面是否安全?

.net reflection clr cil reflection.emit

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

最有效的数据结构,用于查找最常见的项目

我想从Google N-Grams数据集中提取最常用的单词,其未压缩形式大约为20 GB.我不希望使用整个数据集,只需要最频繁的5000个数据集.但如果我写

take 5000 $ sortBy (flip $ comparing snd) dataset
-- dataset :: IO [(word::String, frequency::Int)]
Run Code Online (Sandbox Code Playgroud)

这将是一个无尽的等待.但我该怎么做呢?

我知道Data.Array.MArray包可用于就地数组计算,但我在其文档页面上看不到任何修改项目的功能.还有Data.HashTable.IO,但它是一个无序的数据结构.

我想使用简单Data.IntMap.Strict(具有方便的lookupLE功能),但我不认为它会非常有效,因为它会在每次更改时生成一个新的地图.难道ST单子提高吗?

UPD:我还在CoreReview.SX上发布了程序的最终版本.

sorting haskell data-structures word-frequency

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