小编use*_*479的帖子

什么决定全局变量的内存地址.编译器还是操作系统?

考虑下面的程序.

int a = 0x45;
int main()
{
   int i = a;
   return 0;
}

;; asm code
call   0x401780 <__main>
mov    0x402000,%eax   // why does it allocate 0x402000 only for global 'a'?
mov    %eax,0xc(%esp)
mov    $0x0,%eax
leave
Run Code Online (Sandbox Code Playgroud)

这是在Windows/xp上的CodeBlocks中生成的等效汇编代码.我理解的0x402000是数据段地址.但是内存位置是否由编译器硬编码?

我认为它不是硬编码的,因为其他应用程序也可能/不会使用该内存位置.

众所周知,操作系统为局部变量分配Stack帧并返回堆栈帧的基础addess.使用%esp and %ebp带偏移量的寄存器访问局部变量.

操作系统是否对全局变量执行相同操作?如果为什么值硬编码呢?

dw a 0x40; this directive allocates memory on data segment
mov %ax,a; copies value of a to accumulator
Run Code Online (Sandbox Code Playgroud)

但编译器如何知道"a"具有内存地址0x402000.如果编译器已对该值进行了硬编码,因为0x402000它应首先确保该地址未被其他应用程序使用吗?

如果操作系统在数据段上分配内存,则应根据应用程序和资源改变内存地址.任何人都能解释一下我定义全局变量时会发生什么吗?

c assembly x86-16

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

CodeCompiler - 从另一个 Java 程序编译并运行 Java 程序

我们正在尝试构建一个java代码编译器来创建在线编码测试。我们通过 REST API 将源代码发布到端点。接下来,我们根据测试文件编译并执行输出,然后将结果返回给客户端。

这里的挑战是我们正在针对每个请求启动一个进程javac - compile codejava - execute code每个进程实际上需要 30MB RAM 和 600 毫秒。

这是非常巨大的,我们无法在八核和 16GB RAM 上处理 1000 个用户的负载。如果我们一次收到 200 个请求,则会产生 200 个进程,该进程很重,并且其他请求要排队。

我们能想到的解决方案

  1. 不要javac每次都启动,重用它,但是如何(编译完成后 javac 会自行终止)?
  2. javac应该编译字符串输入而不是来自文件。

我们只是好奇在线编程竞赛平台是如何解决这些问题的?我们仅针对 Java。任何帮助是极大的赞赏。

https://www.journaldev.com/937/compile-run-java-program-another-java-program

java

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

在 vs 代码中调试用 typescript 节点编写的 jasmine 测试

我的单元测试是用 jasmine 写的,而那些是打字稿

// about.service.spec.ts
// say 4 to 5 test cases

// spec/support/jasmine.json
{
  "spec_dir": "src/tests/",
  "spec_files": ["**/*.spec.ts"],
  "helpers": ["jasmine-helpers/**/*.ts"],
  ...
}

// launch.json - vscode file
{
  "version": "0.2.0",
  "configurations": [{
      "type": "node",
      "request": "launch",
      "name": "Jasmine tests",
      "preLaunchTask": "debuggertests",
   }]
}

// tasks.json - vscode 
{
 "version": "2.0.0",
 "tasks": [{
    "label": "debuggertests",
    "type": "npm",
    "script": "test:unit",
    "problemMatcher": []
  }]
}

// package.json
// have to use jasmine-ts which is flavor over ts-node
"test:unit": "jasmine-ts JASMINE_CONFIG_PATH=spec/support/jasmine.json"
Run Code Online (Sandbox Code Playgroud)

我已经使用此配置在 vscode …

node.js jasmine typescript visual-studio-code

4
推荐指数
2
解决办法
3173
查看次数

Serilog 记录器接收器的最小和最大级别

我们发现restrictedToMinimumLevelserilog中存在属性,但它是否也支持最大级别属性?

之前我们使用过NLog具有最小和最大日志记录级别(https://github.com/NLog/NLog/wiki/Configuration-file#rules)。
我们希望从debug to information控制台、information to warning文件和errors数据库中登录。
我们可以使用 appsettings.json 来做到这一点吗?
我们正在使用 dotnet core 2.2。
任何帮助是极大的赞赏。

c# serilog

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

将 React 错误边界与 React 路由器一起使用

我们正在尝试将react-error-boundary与react-router(v6)一起使用,但似乎我们需要用错误边界包装每个路由元素,如下所示

import { ErrorBoundary } from "react-error-boundary";

export const AppRoutes = createBrowserRouter([
{
   path: "/",
   element: <ErrorBoundary FallbackComponent={GlobalError}><Login /></ErrorBoundary>
},
{
  path: "login",
  element: <ErrorBoundary FallbackComponent={GlobalError}><Login /></ErrorBoundary>,
},
{
  path: "trans",
  element: <ErrorBoundary FallbackComponent={GlobalError}><Trans /></ErrorBoundary>
),
{
  path: "*",
  element: <ErrorBoundary FallbackComponent={GlobalError}><RouteNotFound /></ErrorBoundary>
}]);
Run Code Online (Sandbox Code Playgroud)

我们是否有更简单的方法来做到这一点,如下所示?反应路由器中的任何配置标志都会引发错误

import { ErrorBoundary } from "react-error-boundary";

<ErrorBoundary FallbackComponent={GlobalError}>
  <Header />
    <RouterProvider router={AppRoutes} />
  <Footer />
</ErrorBoundary>
Run Code Online (Sandbox Code Playgroud)

下面是当我们将 RouterProvider 包装在错误边界内时得到的错误的屏幕截图

在此输入图像描述

下面是 Trans 组件抛出错误的示例代码。

export function Trans() {
  const [error, setError] = useState(null);

  if (error) {
    throw …
Run Code Online (Sandbox Code Playgroud)

reactjs react-router react-error-boundary

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

防止触发onclick

我正在处理html中的表单提交。请看下面的代码

<form id="form1">
 <button id="btn1" onclick="clicked();">Submit</button>
</form>
<script>
    $("#btn1").click(function (event) {
        alert("event triggered");
        if(some_condition == true){
             // stop firing onclick method but it always submits the form
             event.stopImmediatePropogation(); // not working
             event.preventDefault(); // not working
             event.stopPropogation(); // not working it's for bubbled events
         }
     });
     function clicked(){ alert("clicked me"); }
</script>
Run Code Online (Sandbox Code Playgroud)

我想停止clicked()触发附加到内联onclick属性的函数。我想运行我的jquery click函数,如果出现问题,我不想触发onclick,但它总是运行clicked()函数。谁能帮我。任何帮助是极大的赞赏。

javascript jquery

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

使用GROUP BY限制计数

我想使用COUNT(*)和将计数限制为5 ,group by但它返回所有行.考虑我有一个表名tbhits

         tbhits

     id    |     uname
 ------------------------
    101    |      john
    101    |      james
    101    |      henry
    101    |      paul
    101    |      jacob
    101    |      jaden
    101    |      steve
    101    |      lucas
    102    |      marie
Run Code Online (Sandbox Code Playgroud)

SELECT id,COUNT(*)as'hits'FROM tbhits GROUP BY id

回报

     id    |   hits
 --------------------
     101   |    8
     102   |    1
Run Code Online (Sandbox Code Playgroud)

但我希望小组将最大数量限制为5.

假设我有1000行我不想全部计算,如果行只是大于5然后只显示 5+

我尝试使用LIMIT 5,但它似乎不起作用

SELECT id,COUNT(*) as 'hits' FROM tbhits GROUP BY id LIMIT 5 不起作用.

我也用过 WHERE Clause

SELECT id,COUNT(*)as'hits'FROM tbhits WHERE …

mysql sql

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

例程与任务并行库的实现

我刚刚开始学习Go。Go的优势在于用于处理多个并发连接的goroutines。有人提到

Goroutine可以看作是轻量级线程(但实际上不是线程),它们可以增加/缩小堆栈大小,并且被复用为多个os线程。假设您有1000个goroutine,则根据goroutine的阻塞和等待模式将它们调度到本机OS线程。

基本上,我来自C#和Nodejs。我很困惑它与C#中实现的TaskParallelLibrary有何不同。

TaskParallelLibrary隐藏了创建线程和管理线程的复杂性。您只需启动任务,CLR就会将它们映射到本机线程。在这里您可以创建成千上万的微小任务,这些任务被映射并计划到OS线程。但是,TPL专门解决了异步问题。

我的问题是TPL与goroutines有何不同?goroutine是否使用协程(可暂停函数或?)。TPL还将async / syscalls操作复用到线程池,即使Go也将syscall复用到线程池。

如果我的任何假设是错误的,请纠正我。有人可以在确切的实现方式上有所帮助吗?为什么goroutines声称比TPL更快?

c# multithreading go task-parallel-library

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

如果在两个模块中注册相同的提供程序并且一个模块导入这两个模块会发生什么

我已经LogService在两个模块中作为提供者。现在,在我的 AppModule 中,我正在导入这两个模块。由于我们已经在两个模块注册了提供者,我认为我们将在两个模块级别拥有两个实例LogService。现在,当我们将两者导入 AppModule 时,我们将使用哪个实例?它是第一个导入的模块提供者还是最后一个导入的模块提供者?请看下面的代码

log.service.ts
--------------
@Injectable()
export class LogService {
   private data: number = 45;
}

log.module.ts
-------------
import {LogService} from "./log.service"; 
@NgModule({providers : [LogService]})
export class LogModule{}

logger.module.ts
----------------
import {LogService} from "./log.service"; 
@NgModule({providers : [LogService]})
export class LoggerModule{}

app.module.ts
-------------
@NgModule({imports : [BrowserModule, LogModule, LoggerModule]})
export class AppModule{}

app.component.ts
----------------
import {LogService} from "./log.service"; 
@Component({})
export class AppComponent{
   // will the instance be from LogModule or LoggerModule?
   // If I want to …
Run Code Online (Sandbox Code Playgroud)

angular

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