- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
测试时是否 any()
短路(确实如此!)当 preallocating 时,我发现了以下有趣的行为测试变量:
test=zeros(1e7,1);
>> tic;any(test);toc
Elapsed time is 2.444690 seconds.
>> test(2)=1;
>> tic;any(test);toc
Elapsed time is 0.000034 seconds.
test=ones(1e7,1);
test(1:end)=0;
tic;any(test);toc
Elapsed time is 0.642413 seconds.
>> test(2)=1;
>> tic;any(test);toc
Elapsed time is 0.000021 seconds.
test=zeros(1e7,1);
for ii=1:1e7
test(ii)=1;
if ii==1e7/2
pause
end
end
test
的 50%。需要的内存(如果已满)。这可以用不同的内存百分比非常可靠地再现。
test=zeros(1e7,1);
test(end)=1;
test
的大小在循环中,因为这会使结束迭代非常缓慢(由于需要的内存副本很高),并且它还会在我提议的最后一个测试中分配整个数组。所以我的问题是:
最佳答案
这种行为不是 MATLAB 独有的。事实上,MATLAB 无法控制它,因为它是 Windows 导致的。 Linux 和 MacOS 表现出相同的行为。
多年前,我在 C 程序中注意到了完全相同的事情。事实证明,这是有据可查的行为。 This excellent answer详细解释了大多数现代操作系统中内存管理的工作原理(感谢 Amro 分享链接!)。如果此答案对您来说不够详细,请阅读它。
首先,让我们用 C 语言重复 Ander 的实验:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int main (void) {
const int size = 1e8;
/* For Linux: */
// const char* ps_command = "ps --no-headers --format \"rss vsz\" -C so";
/* For MacOS: */
char ps_command[128];
sprintf(ps_command, "ps -o rss,vsz -p %d", getpid());
puts("At program start:");
system(ps_command);
/* Allocate large chunck of memory */
char* mem = malloc(size);
puts("After malloc:");
system(ps_command);
for(int ii = 0; ii < size/2; ++ii) {
mem[ii] = 0;
}
puts("After writing to half the array:");
system(ps_command);
for(int ii = size/2; ii < size; ++ii) {
mem[ii] = 0;
}
puts("After writing to the whole array:");
system(ps_command);
char* mem2 = calloc(size, 1);
puts("After calloc:");
system(ps_command);
free(mem);
free(mem2);
}
ps
命令语法取决于您的操作系统。编译
gcc so.c -o so
, 运行
./so
.我在 MacOS 上看到以下输出:
At program start:
RSS VSZ
800 4267728
After malloc:
RSS VSZ
816 4366416
After writing to half the array:
RSS VSZ
49648 4366416
After writing to the whole array:
RSS VSZ
98476 4366416
After calloc:
RSS VSZ
98476 4464076
malloc
之后增长之后又是
calloc
,两次都大约为 98,000 KiB(略超过我们分配的 1e8 字节)。
calloc
再分配 1e8 个字节。 ,并且在 RSS 中没有看到任何变化。请注意
calloc
返回一个初始化为 0 的内存块,就像 MATLAB 的
zeros
做。
calloc
因为很可能是 MATLAB 的
zeros
通过
calloc
实现.
calloc
会发生什么? ,它返回零初始化内存?这也在
the answer I linked earlier 中有解释.对于小型阵列
malloc
和
calloc
从程序开始时从操作系统获得的更大池中返回一块内存。在这种情况下,
calloc
将向所有字节写入零以确保它是零初始化的。但是对于更大的数组,直接从操作系统获取新的内存块。操作系统总是提供归零的内存(同样,它会阻止一个程序查看另一个程序的数据)。但是因为内存在使用之前不会被物理分配,清零也会延迟,直到内存页面被放入物理内存。
zeros
分配内存,而您看不到 MATLAB 内存占用的任何变化。
zeros
分配整个数组(可能通过
calloc
),并且内存占用只会随着使用该数组而增加,一次一页。
you can improve code execution time by preallocating the maximum amount of space required for the array.
calloc
的行为上面描述的也解释了
this other strange behavior of the zeros
function :对于小阵列,
zeros
比大数组更昂贵,因为小数组需要由程序显式清零,而大数组由操作系统隐式清零。
关于matlab - 我们需要预先分配。但是MATLAB没有预分配预分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51987892/
我正在阅读哈德利的 Advanced R并尝试一些东西。我正在尝试创建一个 lazy闭包函数返回一个带有提供的函数 data.frame在其环境中以及使用 with并且能够在以后提供额外的函数参数。
我有两个 ViewController。初始 ViewController 是输入和存储 URL 的地方。此初始 ViewController 的 viewDidLoad 还应该在应用程序启动时开始加
你是怎么用的 对于应用程序中的 ListView 项也应该在设备 <11 上运行? 由于 activated_state 在 HC 之前不可用,我只能想到两个肮脏的解决方法: 在您的 Activit
我正在为 android (2.1 > 3.1) 编写一个应用程序,我想使用熟悉的做法,即在 Honeycomb 应用程序中使用应用程序图标来进入家庭 Activity ,但是,当我之前运行该 Act
如果搜索的键不存在,我如何覆盖方法 GET 或编写一个将在服务器端执行的新函数返回另一个键值? 示例: 如果关键字“word_1 word_2 word_3 word_4”不存在则搜索关键字“word
对于我的存储库,我使用的是 Git 和 Stash。在 Stash 端,我限制了(只读)对 master 的访问权限,因此任何用户都可以从 master 分支分支以获取功能/分支,但不能直接 merg
如何配置dgrid及其存储以定义渲染行时是否已经选择了行? 例如,如果我的行数据是这样的: { id: 1, name: 'Item Name', selected: true } 我当前
有没有一种方法可以将变量从一个 BeanShell 前/后处理器引用到另一个 BeanShell 处理器(它们在同一个线程组中)? 如果我在 HTTP 请求下的 BeanShell 预处理器中创建了一
问题 我已尝试添加预操作 shell 脚本,这些脚本会根据我正在构建的内容打开/关闭我的 .pch 文件中的某些定义。 但是,在运行构建时,没有任何反应。我不是一个流利的 shell 脚本编写者,所以
我有一个 HTML 字符串用作 jQuery 输入文档。 // the variable html contains the HTML code jQuery( html ).find( 'p' ).
在 Mercurial 中允许 merge 之前有没有办法进行一些检查? 通过将以下内容添加到 ~/.hg/hgrc,我找到了更新前 Hook ,并拥有一个在允许更新之前运行的脚本: [hooks]
总结: 预 Controller Hook 是否在缓存期间执行?是否有任何 Hook 点可以执行? (系统前?) 我应该强调一个事实,即 Hook 不会影响发送到浏览器的内容。这不是问题。 详细版:
我正在使用适用于 android 的 Skobbler Map API,到目前为止它一直非常好。按照官方的“操作方法”,我已经能够将 map 应用到我的应用程序中。比我可以让应用程序下载 map 并离
当我安装bcrypt时我的 hapi js 项目的模块尚未安装,它显示类似 node-pre-gyp install --fallback-to-build 我尝试通过运行来安装; npm i nod
我试图使用此代码的变体: apply plugin: 'java' apply plugin: 'idea' idea.workspace.iws.withXml { provider ->
假设我们有一个 PHP 项目,其依赖项 A 和 B 分别依赖于 PHP 库 X,但版本不同。 通常,人们会使用诸如 composer 之类的 PHP 依赖管理器,它可以通过在与 A 和 B 兼容的版本
这似乎违背了代码块的目的,但我希望能够在代码块中加粗。例如,如果我想将返回行加粗: int main(void) { **return 0;** } 最佳答案 您必须在 HTML 中执行此操作
我们是否应该使用 Huggingface(预)训练一个 BERT 无框模型的小写输入数据?我查看了 Thomas Wolf ( https://github.com/huggingface/trans
我有两个模式: 技能: var mongoose = require("mongoose"); var SkillSchema = new mongoose.Schema({ skill: {
我这里有问题。这适用于 Chrome,但我无法在 IE11 的 index.html 中使用任何动画。当它不想工作时,我会看到一个静态屏幕。同样在 IE 中,消息不会像它应该的那样消失。如果我将 di
我是一名优秀的程序员,十分优秀!