Dzięki @micnic za udzielenie odpowiedzi na pytanie. Chciałbym zaoferować dodatkowe informacje o tym, dlaczego wprowadziłem smalloc.
Nie myśl, że przydział pamięci w pamięci JS to coś zupełnie nowego. Jest to ten sam rodzaj mechanizmu, który jest używany przez Typed Arrays pod maską. Tak więc wszędzie, gdzie możesz użyć Tablicy Typów, możesz również użyć smalloc. Zaletą smalloc jest to, że nie definiuje niczego dla ciebie. Zapewnienie maksymalnej elastyczności Twojego API. Jest także bezpieczny, ponieważ GC wyczyści twoje przydziały, gdy obiekt nie będzie już używany.
Jednym z zastosowań będzie biblioteka matematyki. Zwłaszcza jeśli piszesz moduł natywny. Osobiście używam go do skomplikowanych optymalizacji wydajności przydzielania pamięci do obiektu, a następnie dzielenia się tą pamięcią między JS i C++, aby umożliwić współdzielenie stanu między tymi dwoma. Jest to zdecydowanie najszybszy sposób zrobienia tego i doprowadził do pewnych imponujących optymalizacji w Węzłach i we.js.
Pamiętaj, że możesz przydzielić do istniejących obiektów. Na tym polega moc. Na przykład:
function Alloc(n) {
n >>>= 0; // uint32 conversion
this.length = n;
smalloc.alloc(n, this);
}
var a = new Alloc(16);
Jest prosty nowy konstrukt, który właśnie przydziela Uint8
zewnętrzną tablicę danych na przykład.
będę szybko powtórzyć odpowiedzi na pytania:
- Zastanawiam się, czy istnieje naprawdę potrzeba alokacji pamięci surowy w javscript wykorzystaniem smalloc?
Tak. Think Typed Arrays.
- Jeśli to potrzebne, dlaczego?
Odpowiedź udzielona powyżej. Szukaj również wszystkiego, co używa Typed Array.
- jaki byłby przypadek użycia przy użyciu smalloc?
Odpowiedź udzielona powyżej. Ponadto istnieje wiele innych zastosowań, które programiści znajdują dla niego.
- a jeśli nie, dlaczego członkowie io.js dodali ten moduł?
Napisałem go na długo przed pojawieniem się pliku o nazwie j.js. :)
- Czy staramy się, aby javascript był językiem mocno napisanym?
Absolutnie nie. Te dwa nie są nawet powiązane.
UPDATE: Z powodu zerwania zmian nadchodzących w V8 v4.4, smalloc
została oznaczona jako "przestarzałe" począwszy io.js v2.
to, co zrobił mallocs w c .. czy potrzebowaliśmy tego w javascript beforre? Nie!! więc dlaczego teraz? –
@NaeemShaikh, to jest tylko moduł, który pomaga tworzyć bufory, jeśli chcesz utworzyć klasy podobne do buforów, użyj go, jeśli nie - po prostu przekaż, nie musisz go używać, za każdym razem gdy używasz buforów, jesteś używając smalloc. – micnic