标签: buffer

是什么使它成为在Web浏览器中打印1到1,000,000(以空格分隔)的最快的JavaScript?

我在这里阅读有关JavaScript输出缓冲的内容,并且试图让我的头脑绕过作者所说的在打印1到1,000,000网页时最快的脚本.(向下滚动到标题"获胜的一百万个数字脚本".)稍微研究一下后,我有几个问题:

  • 是什么让这个脚本与其他方法相比如此高效?
  • 为什么缓冲加快了速度?
  • 如何确定要使用的适当缓冲区大小?
  • 这里有没有人有任何可以进一步优化这个脚本的技巧?

(我意识到这可能是CS101,但我是那些受过抨击的,自学成才的黑客之一,而且我希望能从这一方面的集体智慧中受益.谢谢!)

javascript optimization buffer

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

检查当前Emacs缓冲区是否包含字符串

我在emacs中打开了一个缓冲区.我想要一个函数,t如果当前缓冲区包含字符串将返回,否则返回nil.

(defun buffer-contains-substring (string)
    ...
)
Run Code Online (Sandbox Code Playgroud)

lisp emacs buffer elisp

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

AudioTrack lag:obtainBuffer超时

我通过加载文件并通过FileInputStream> BufferedInputStream> DataInputStream方法将字节输入AudioTrack.write()来在我的Android手机上播放WAV.音频播放效果很好,如果是,我可以轻松调整采样率,音量等,性能良好.然而,一首曲目开始播放大约需要两秒钟.我知道AudioTrack有一个不可避免的延迟,但这太荒谬了.我每次播放曲目都会得到:

03-13 14:55:57.100: WARN/AudioTrack(3454): obtainBuffer timed out (is the CPU pegged?) 0x2e9348 user=00000960,     server=00000000
03-13 14:55:57.340: WARN/AudioFlinger(72): write blocked for 233 msecs, 9 delayed writes, thread 0xba28
Run Code Online (Sandbox Code Playgroud)

我注意到,每次播放曲目时,延迟的写入次数会增加一次 - 即使是在多个会话中 - 从手机开机之时起.块时间始终为230 - 240ms,考虑到此设备上的最小缓冲区大小为9600(9600/44100),这是有意义的.我在互联网上的无数次搜索中看到了这个消息,但它通常似乎与不播放音频或跳过音频有关.就我而言,这只是一个延迟的开始.

我正在高优先级的线程中运行我的所有代码.这是我正在做的截断但功能正常的版本.这是我的播放类中的线程回调.再次,这是有效的(现在只播放16位,44.1kHz,立体声文件),它只需要永远启动并且每次都有获取缓冲/延迟写入消息.

public void run() {

    // Load file
    FileInputStream mFileInputStream;
    try {
        // mFile is instance of custom file class -- this is correct, 
        // so don't sweat this line
        mFileInputStream = new FileInputStream(mFile.path());
    } catch (FileNotFoundException e) {
        // log
    }

    BufferedInputStream mBufferedInputStream …
Run Code Online (Sandbox Code Playgroud)

audio android buffer delay lag

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

每帧缓冲区

在切换和显示缓冲区时,是否可以通过每个emacs帧获取相关缓冲区的子集

我的意思是

  • 专用于GNUS的帧将仅显示gnus缓冲区
  • 专用于ERC的帧将仅显示erc缓冲区
  • 专用于编辑的帧将仅显示所有其他缓冲区

irc emacs buffer gnus

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

顶点缓冲区对象的最大大小(OpenGL ES 2.0)

绑定到GL_ARRAY_BUFFER或GL_ELEMENT_ARRAY_BUFFER的顶点缓冲区对象是否有最大大小?

最初,我正在绘制一个由16个子网格组成的网格.对于每个子网格,我创建了一个顶点缓冲区,在渲染阶段,我调用了glDrawElements.这在iOS模拟器上运行良好,但是当我尝试渲染到我的设备时,屏幕不断闪烁并且不显示网格.

然后我做了一些阅读,发现在渲染阶段你不应该多次调用glDrawElements.我试图将所有子网格组合成一个顶点缓冲区.绑定到GL_ARRAY_BUFFER的缓冲区包含3969个顶点,其中每个顶点包含20个浮点数.所以这个缓冲区的大小是317520字节.与GL_ELEMENT_ARRAY_BUFFER绑定的指数是16425空头.因此,该缓冲区的大小为32850字节.

在OpenGL维基上,它表示对于顶点缓冲对象,"根据一个nVidia文档,1MB到4MB是一个不错的大小".

我在绑定每个缓冲区对象并调用glDrawElements之后打印出glGetError的结果,我没有看到任何错误.但是,我的网格没有正确显示.似乎只有第一个网格被正确绘制.我实施这个方法有什么可疑之处吗?我不想让这个问题太长,所以如果有任何额外的信息你需要回答这个问题让我知道.如果理论上没有什么似乎是错误的,也许我只是在实施它时犯了一个错误.

buffer opengl-es vbo vertex

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

如何解析通过/ proc文件传递给内核模块的大量数据?

编辑:我发现seq_file很容易从内核向用户空间写入大量数据.我正在寻找的是相反的; 一个API,便于从用户空间读取大量数据(多个页面).

编辑2:我正在实现一个<stdio.h>作为内核模块的端口,它能够打开/proc(以及后来的其他虚拟文件系统),类似于FILEs并处理类似的输入和输出<stdio.h>.你可以在这里找到这个项目.


我发现了很多关于内核如何将大量数据写入/ proc(用于用户空间程序)的问题,但没有其他方面.让我详细说明:

这个问题基本上是关于输入被标记化的算法(例如ints或混合int和字符串等),假设数据可能在多个缓冲区之间被打破.

例如,假设以下数据被发送到内核模块:

12345678 81234567 78123456 67812345 5678 1234 45678123 3456 7812 23456781
Run Code Online (Sandbox Code Playgroud)

并且为了这个例子,假设Linux提供/ proc处理程序的页面大小是20字节(相对于真正的4KB).

从/ proc(在内核模块中)读取数据的函数然后查看数据:

call 1:
"12345678 81234567 78"
call 2:
"123456 67812345 5678"
call 3:
" 1234 45678123 3456 "
call 4:
"7812 23456781"
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,当78在第一次调用中读取时,它应该在下一帧之前处理,以便它决定78帧之间是整数还是一帧.

现在我发现seq_files显然只是在内核想要数据写入用户而不是读取时(或者可能是HOWTO写得非常糟糕).

我做了什么

到目前为止,我已经提出了以下解决方案(我是从记忆中写的,所以我可能会错过几次错误检查,但请耐心等待):

在初始化阶段(比如说init_module …

c linux buffer kernel procfs

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

setvbuf无法使stdin无缓冲

我的主要目的是在getchar获得角色后立即返回,而不是等待ENTER密钥.我试过这个

int main()
{
    setvbuf(stdin,NULL,_IONBF,0);
    getchar();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

将其与原型进行比较 setvbuf

setvbuf ( FILE * stream, char * buffer, int mode, size_t size );
Run Code Online (Sandbox Code Playgroud)

它应该设置stdin为无缓冲模式.

但仍然getchar()在等待ENTER

我见过这样的相关帖子

在C中读取字符时打印

这表明制作stdin无缓冲的替代方法.但我很想知道为什么setvbuf方法不起作用

c buffer stdin getchar unbuffered

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

用于序列化/反序列化的标准C++代码

我已经使用硬件API很长一段时间了,几乎所有我工作过的API都有一个C接口.因此,在很多时候我使用裸news,不安全的缓冲和许多用C++代码包装的C函数.最后,C纯代码和C++纯代码之间的边界在我的脑海中搞砸了(我不知道澄清这个前沿是否有用).

现在,由于一些新的编码风格要求,我需要将所有怀疑不安全的代码重构为用C++编写的更安全的代码(假设C++代码更安全),最终目标是使用C++带来的工具.

所以,为了摆脱我的困惑,我正在寻求关于C/C++的几个主题的帮助.

memcpy VS std::copy

AFAIK memcpy是一个位于C库中的函数,因此它不是C++ ish; 另一方面std::copy是STL中的一个函数,所以它是纯C++.

  • 但是,这是真的吗?毕竟,如果数据是平凡可复制的,std::copy则会调用std::memcpy(进入cstring标题).
  • 将所有memcpy调用重构为std::copy调用将使代码更"纯C++"?

为了处理新的代码样式要求,我决定继续使用memcpy重构,有一些关于memcpy和的问题std::copy:

memcpy类型不安全,因为它适用于原始void指针,可以管理任何类型的指针,无论它的类型如何,但同时非常灵活,std::copy缺乏这种灵活性,确保类型安全.乍一看,memcpy是使用序列化和反序列化例程的最佳选择(这是我确实使用的真实情况),例如,通过自定义串行端口库发送一些值:

void send(const std::string &value)
{
    const std::string::size_type Size(value.size());
    const std::string::size_type TotalSize(sizeof(Size) + value.size());
    unsigned char *Buffer = new unsigned char[TotalSize];
    unsigned char *Current = Buffer;

    memcpy(Current, &Size, sizeof(Size));
    Current += sizeof(Size);

    memcpy(Current, value.c_str(), Size);

    sendBuffer(Buffer, TotalSize);

    delete []Buffer;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码运行正常,但看起来很糟糕; …

c++ serialization buffer allocator

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

BufferedReader默认缓冲区大小?

根据文档,BufferedReader(Reader)使用默认缓冲区大小,而第二个构造函数BufferedReader(Reader, int)允许设置缓冲区大小.

public BufferedReader(Reader in)

创建使用默认大小的输入缓冲区的缓冲字符输入流.

但是,文档并未提及默认缓冲区大小.

BufferedReader的默认缓冲区大小是多少?

java buffer bufferedreader

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

base64中的base64 JSON编码字符串

如何在nodejs中创建base64 JSON编码的字符串?

我尝试过这个并没有用.

var buff = new Buffer({"hello":"world"}).toString("base64");
Run Code Online (Sandbox Code Playgroud)

是这个吗?

var buff = new Buffer(JSON.stringify({"hello":"world"})).toString("base64");
Run Code Online (Sandbox Code Playgroud)

javascript base64 buffer json node.js

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