我想知道是否有一种简单的方法来做我正在寻找的东西.基本上,我在Excel 2011中有一堆资产表和一堆数据.我一直希望看到的一条特定信息是尚未报销的金额.换句话说,我有一个支付金额的列,另一个是否已经报销(是/否).我希望将报销字段等于"否"的所有已支付金额相加.
我知道我可以对整个列进行求和并筛选出已经报销的那些列,但我希望它能显示全部数量,无论过滤器是什么(或者没有打开过滤器).
我无法找到好的关键字来向Google描述这一点,所以我在这里问.我想在Excel中完成此操作,而不是在外部程序或脚本中.
在我看来,人们总是回避,或者更确切地反对在微控制器上使用C++,但我不能为我的生活找出原因.如果您远离大型C++库(例如STL)并且您不尝试使用RTTI或异常处理等复杂功能,那么C与C++之间是否存在明显的差异?虚拟继承是否会对复杂性或占用空间产生巨大影响?我认为这是一个额外的内存,但大多数复杂性将由编译器处理,但我再也不知道很多关于那个黑魔法.我只是不明白为什么人们非常坚持使用C,除了少数几个没有C++编译器的架构(如果有的话).即使你不能使用你的cin或cout,模块化和模板的好处似乎也是明智之举.
我问,因为我正在为一些我想做的爱好项目做一些研究.理想情况下,我希望严格地使用C++来实现很好地模块化的能力,而C语言的"SomeClass_SomeMethod(struct object*this ...)"是"面向对象"的方法.(我更喜欢这些项目的对象Pascal,但是对这种语言的支持并不完全是明星......)我宁愿避免转向功能更强大的微处理器,因为A.对于我正在做的项目,我不需要大量的资源..我不打算写60个状态卡尔曼滤波器或编码1080p视频B.(真正的踢球者)我想使用DIP和QFP封装中提供的处理器.我希望能够在没有焊接或烤制烤箱的任何东西的情况下进行原型设计.
有什么想法吗?
我在测试环境中运行了最新的GitLab docker镜像,我遇到了GitLab运行器的问题.它无法通过HTTP链接进行克隆,产生以下消息:
Running on runner-bd27e50b-project-1-concurrent-0 via machine...
Cloning repository...
Cloning into '/builds/my/awesome-project'...
fatal: unable to access 'http://gitlab-ci-token:xxxxxx@127.0.0.1/my/awesome-project.git/':
Failed to connect to 127.0.0.1 port 80: Connection refused
ERROR: Build failed with: exit code 1
Run Code Online (Sandbox Code Playgroud)
我用--debug
标志运行了gitlab-runner 并使用了它正在尝试的确切地址(带有令牌)并且我可以克隆存储库就好了.我不知道为什么服务无法克隆存储库.运行程序执行程序也配置为"docker".也许有一些端口映射问题进入该容器?
我遇到了一个奇怪的问题,我已经能够追踪到一些,但我仍然看不出原因.也许有人在这里可以解释一下?
我在VxWorks 5.5上运行PowerPC处理器,使用PPCgnu604工具链在C++中进行开发.
我有一个这样的课:
class MyClass
{
public:
void run( void );
private:
CommandMesssageClass command;
StatusMessageClass status;
};
Run Code Online (Sandbox Code Playgroud)
当我的应用程序启动时,它将动态分配一个MyClass实例并生成一个指向其"run"函数的线程.基本上它只是坐在那里轮询命令,并在收到后,将发回状态.
请注意,这是该类的简化版本.为简洁起见,还有许多其他方法和变量.
我看到的问题是当命令和状态消息都被定义为私有类成员时,我会在内存中获得可用字节的更改,尽管事实上应该没有动态内存分配.这很重要,因为这需要一个确定性和速率安全的程序.
如果我将一个或两个消息声明移动到run函数中,它可以正常工作而无需额外分配!
在理解C++声明和内存分配时,我必须遗漏一些基本内容.我的理解是,动态实例化的类实例将在创建时完全分配在堆上(包括所有成员变量).我在这里看到的区别在于将消息声明移动到run函数会将它们放在堆栈上.在这种情况下,堆的大小足以支持整个类的大小.为什么在使用特定部分之前似乎没有分配足够的内存?
消息类不会自己动态分配.(如果他们这样做了,我希望移动声明不会改变这种情况下的行为,我仍然会看到堆大小的变化.)
要监视内存分配,我正在使用以下VxWorks memLib(或memPartLib)调用:
memPartInfoGet( memSysPartId, &partitionStatus );
...
bytesFree = partitionStatus.numBytesFree;
Run Code Online (Sandbox Code Playgroud)
编辑:
为了澄清,MyClass对象在初始化例程中被实例化并初始化,然后代码进入速率安全处理.在此期间,在通过串行线路接收到命令消息(与命令或状态消息对象的第一次交互)时,分配额外的存储器(或者更确切地说,自由字节数减少).这很糟糕,因为动态内存分配不是确定性的.
我已经能够通过移动类变量来解决问题,正如我所描述的那样.
我在Ubuntu 16.10上使用numpy(1.13.1)和pandas(0.20.3)和python 2.7或3.5(两者都有相同的问题).
我正在调查大熊猫内存处理(特别是当它复制或不复制数据时)并遇到了一个我不明白的重要内存问题.虽然我已经看到(很多)人们对其内存性能的其他问题,但我没有发现任何直接解决此问题的问题.
具体来说,熊猫分配大量的内存比我要求它.当我尝试使用特定大小的列分配DataFrame时,我注意到了一些非常奇怪的行为:
import pandas as pd, numpy as np
GB = 1024**3
df = pd.DataFrame()
df['MyCol'] = np.ones(int(1*GB/8), dtype='float64')
Run Code Online (Sandbox Code Playgroud)
当我执行这个时,我看到我的python进程实际上分配了6GB内存,(如果我要求2GB则为12G,如果我要求3GB则为21GB,如果我要求4GB,我的计算机会中断: - /)而不是1GB预期.我想起初可能Python正在进行一些积极的预分配,但是如果我只构建numpy数组本身,我每次都会得到多少内存,无论是1GB,10GB,25GB等等.
此外,更有趣的是,如果我稍微更改代码:
df['MyCol'] = np.ones(int(1*GB), dtype='uint8')
Run Code Online (Sandbox Code Playgroud)
它分配了很多内存,导致我的系统崩溃(单独运行numpy调用正确分配1GB内存).(编辑2017/8/17:出于好奇,我今天尝试了更新版本的熊猫(0.20.3)和numpy(1.13.1),以及RAM升级到64GB.并且运行此命令仍然被打破,分配所有64(ish)GB的可用RAM.)
如果pandas制作副本并且可能会分配另一列来存储索引,我可以理解要求的内存加倍甚至三倍,但我无法解释它实际上在做什么.粗略地看一下代码也不是很清楚.
我尝试用几种不同的方式构建数据框,所有这些都具有相同的结果.鉴于其他人成功地使用这个软件包进行大数据分析,我不得不假设我做了一些可怕的错误,尽管我可以告诉我文档应该是正确的.
思考?
一些额外的说明:
我没有找到任何资源来完全回答我正在尝试理解的问题我在一个我正在研究的软件中看到的问题,所以我会问这些天才!
首先,我在PowerPC处理器上运行VxWorks.
在尝试调试单独的问题时,我尝试在中断处理例程中抛出一些快速而脏的调试代码.它涉及一个双精度浮点运算来存储一个感兴趣的值(即,自从我看到最后一个中断进入以来已经存在多长时间),我后来在运行线程中的处理程序之外使用了它.我没有看到这方面的问题(当然,它需要更长的时间,但时间方面我很快;中断不会太快)但是VxWorks肯定不喜欢它.当它到达那个代码时,它一直崩溃,这是重新启动系统的一个糟糕的崩溃.我花了一些时间来追踪双重操作作为问题的根源,我意识到它甚至不是双重"操作",即使从中断中调用的例程返回一个常量的双重失败也是如此.
在PowerPC(或其他一般体系结构)上,通常会出现在中断处理程序中执行浮点运算并在中断处理程序调用的函数中返回浮点(或其他类型)值的问题吗?我不知道为什么这会导致程序崩溃.
(解决方法是延迟将自上次中断后的"滴答"转换为"时间",因为laster中断直到代码超出处理程序,因为它似乎处理长整数操作就好了.)