我相信,如果这是在惹你生气,那就毫无疑问是愚蠢的.我有关于管道衬里的问题吗?
什么是管道衬里?
Theory说:" 通过流水线操作,CPU在第一条指令完成之前开始执行第二条指令.流水线操作可以加快处理速度,因为CPU不必等待一条指令完成机器周期."
我的问题是考虑我正在开发一个单处理器系统,一次只能执行一条指令,当CPU忙时,如何同时执行取出下一条指令?如果我缺乏概念清晰度,请对我有所启发.如果有单独的硬件使同时处理发生,它是什么?请解释一下.
我不确定问题标题是否准确......让我先解释一下我原来的简单场景,然后继续解释我想做什么,但不能.
最初,我有类似的东西:
class Operand;
Operand genOperandA() { ...; return Operand(); }
Operand genOperandB() { ...; return Operand(); }
... // more operand-generation functions
typedef Operand (*OpGen)();
// Table of function pointers
static const OpGen generators[] =
{
genOperandA,
genOperandB,
...
};
// Function to do some operation on the operand
void operate(Operand& op);
...
// Example call
operate(generators[1]());
Run Code Online (Sandbox Code Playgroud)
到目前为止这么好(我想).但是,现在有几种派生的操作数类型,例如class RegisterOperand : public Operand.我有新的专用genOperand函数,理想情况下会返回派生类型的实例.但我不能这样做:
Operand genOperandC() { ...; return RegisterOperand(); }
Run Code Online (Sandbox Code Playgroud)
我不能这样做:
RegisterOperand genOperandC() { ...; return …Run Code Online (Sandbox Code Playgroud) 我注意到一些程序在使用后明确将零敏感内存分配.例如,OpenSSL有一种清除RSA密钥占用内存的方法:
"释放RSA结构rsa.此函数应始终用于释放RSA结构,因为它还可以通过首先清除内存来安全地释放子字段."
如果任何(C/C++)程序包含这样的敏感变量,你应该如上所述明确归零内存吗?(或者,将记忆归为妄想或只是保护措施)?
此外,当程序完成时,任何分配的内存最终都会分配给另一个程序.在Linux系统上,是否在分配给另一个程序之前清理或清理了内存?或者,第二个程序可以读取第一个程序的一些旧内存内容吗?
我不确定为什么以下代码中的最后一个语句是非法的.Integer应该是一个子类型?,为什么我不能分配给它b?
List<String> a = new ArrayList<String>();
a.add("foo");
// b is a List of anything
List<?> b = a;
// retrieve the first element
Object c = b.get(0);
// This is legal, because we can guarantee
// that the return type "?" is a subtype of Object
// Add an Integer to b.
b.add(new Integer (1));
Run Code Online (Sandbox Code Playgroud) 也就是说,在C中,我们可以定义一个函数:
func(){
static int foo = 1;
foo++;
return foo;
}
Run Code Online (Sandbox Code Playgroud)
每次调用时它都会返回一个更高的数字.C#中是否有等效的关键字?
要求:
我们在DB中有值
Chennai
Baroda
Bangalore
New Delhi
São Paulo, Lisboa
San Jose
Run Code Online (Sandbox Code Playgroud)
等等...
所以我想将这些字符串转换为唯一的短字符串.例如
Chennai –> xy67kr
San Jose –> iuj73d
Run Code Online (Sandbox Code Playgroud)
基本上类似于URL缩短.
并且转换它的算法应该是可逆的.即,当我将"xy67kr"传递给解码函数时,它应该给我"Chennai".
期待着寻求帮助.
我正在尝试列出由泛型类创建的所有运行时构造类.换句话说,如果我有一个班级:
public GenericCls<T> {
public void Reset() { ... }
...
}
Run Code Online (Sandbox Code Playgroud)
我在这样的各个地方都有代码:
GenericCls<int> gci = new GenericCls<int>();
GenericCls<String> gcs = new GenericCls<String>();
GenericCls<float> gcf = new GenericCls<float>();
...
Run Code Online (Sandbox Code Playgroud)
我可以得到这样的东西吗?:
Type[] allconstructed = GetAllConstructed(typeof(GenericCls<>));
Run Code Online (Sandbox Code Playgroud)
返回 {GenericCls<int>,GenericCls<String>,GenericCls<float>,...}
用例涉及一个通用的分配器,它支持任何类型的对象分配(就像new XXX()垃圾收集器一样好,但更好).我不会详细说明,因为它只会使问题复杂化.基本上,我不会在编译时知道所有构造的类,因为该库是一个旨在与单独的代码项目一起使用的DLL.所以我需要某种形式的反射,我似乎无法在互联网上找到.
Assembly.GetExecutingAssembly().GetExportedTypes()除了基本泛型类(即typeof(GenericCls<>))之外不包含任何内容
typeof(GenericCls<>).GetGenericArguments() 仅返回类型"T",它不仅是无效类型,而且完全没用.
如果只知道泛型类的类型,是否甚至可以找到泛型类的所有构造类?(typeof(GenericCls<>);)我不确定"构造"是否是正确的词 - 我想知道当前活动的所有具体泛型派生类,或者所有这些将存在的(不确定C#如何处理幕后的通用构造) ).
我正在尝试编译一个程序,在我的桌面上编译完全正常,但在我的笔记本电脑上,它编译,但每次运行时都会给我这个错误:
Windows已在RR.exe中触发了断点.
这可能是由于堆损坏,这表明RR.exe或其加载的任何DLL中存在错误.
这也可能是由于用户在RR.exe具有焦点时按下F12.
输出窗口可能包含更多诊断信息.
我已经注释掉了行,直到找到导致错误的行:
if(glfwOpenWindow(width_, height_, 0, 0, 0, 0, 32, 0, GLFW_WINDOW) != GL_TRUE) {
throw std::runtime_error("Unable to open GLFW window");
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是,如果我替换width_和height_常量,例如分别为800和600,它会停止堆损坏.此外,如果我只使用构造函数设置的默认值而不是传递值,它不会崩溃.
这是完整的代码.上面的行在Window构造函数中.
在window.h
#pragma once
#include <iostream>
#include <GL\glew.h>
#include <GL\glfw.h>
#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "glu32.lib")
#pragma comment(lib, "glew32.lib")
#pragma comment(lib, "GLFW.lib")
class Window {
public:
Window(unsigned width = 800, unsigned height = 600);
~Window();
void clear();
inline void display() { glfwSwapBuffers(); }
inline bool exit() { return …Run Code Online (Sandbox Code Playgroud) 我们如何通过仅使用一个循环来导航二维数组而不使用嵌套的循环.
String ar[][]=new String [3][4];
Run Code Online (Sandbox Code Playgroud) 链接器脚本是否可以访问makefile/shell变量并根据所述变量做出决定?
例如,假设我想在不使用不同的链接描述文件的情况下更改下面RAM区域的开头,是否可以使用make变量来执行此操作?
MEMORY
{
ifeq ($(SOME_VAR),0)
RAM (wx) : ORIGIN = 0x100000, LENGTH = 128K
else
RAM (wx) : ORIGIN = 0x200000, LENGTH = 128K
endif
}
Run Code Online (Sandbox Code Playgroud) c# ×2
c++ ×2
generics ×2
java ×2
algorithm ×1
architecture ×1
arm ×1
assembly ×1
c ×1
c#-4.0 ×1
class ×1
glfw ×1
linker ×1
linux ×1
makefile ×1
pipelining ×1
polymorphism ×1
reflection ×1
security ×1